Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

C# - где используется класс Debug?

846  1 2 все
Программист коренной житель29.11.22 13:57
NEW 29.11.22 13:57 
в ответ alex445 29.11.22 13:03
Т.е. Debug не связан с юнит-тестами?

нет


Не заменяет их?

нет


Не используется в них?

нет



Мне казалось, что натолкав в код всяких Debug.Assert и подобных, можно не писать юнит-тесты для этого кода.

Debug.Assert помогает в отладке существующего кода. При этом не просто в отладке, а в в отладке дебаг сборки.

Юнит-тесты работают при каждой сборке, их цель - убедиться, что задуманный функционал не был сломан изменениями.

#21 
Срыв покровов Забанен до 7/7/25 16:05 патриот29.11.22 22:30
NEW 29.11.22 22:30 
в ответ Программист 29.11.22 13:57

я чот тоже не понимаю смысла в этом debug.assert

В режиме debug у меня студия итак реагирует на любое исключение.
да, оно вылезет только при обращёнии к неправильным данным, но даст мне сигнал копать причины.

#22 
Murr патриот29.11.22 23:20
Murr
NEW 29.11.22 23:20 
в ответ Программист 28.11.22 12:05

Ну вот у нас как раз такой случай

-----

Покопайся в архиве - у меня как-то инициализированная статическая переменная в процессе работы в нулл падала...

#23 
Murr патриот29.11.22 23:26
Murr
NEW 29.11.22 23:26 
в ответ alex445 28.11.22 13:58

можно бросить через throw?

-----

Ну попробуй пару сотен тысяч отредактировать поменяв Release/Debug на MyMode со специфическими требованиями...

А из специфических... скажем... все как в релизе, а для 20 классов - дебуг...

Вперед, наш гениальный кодер...

#24 
Murr патриот29.11.22 23:29
Murr
NEW 29.11.22 23:29 
в ответ alex445 28.11.22 14:02

чтобы код останавливался в том месте, где значение переменной обналливается?

-----

Хи-хи...

Оно до обращения - не обнуленное, в процессе - не обнуляеться, но обнуленное после обращения...

#25 
Murr патриот29.11.22 23:32
Murr
NEW 29.11.22 23:32 
в ответ Срыв покровов 29.11.22 22:30

да, оно вылезет только при обращёнии к

-----

В кофиге Студии поройся - там много вариантов настройки когда показывать что что произошло.

#26 
alex445 коренной житель30.11.22 01:41
NEW 30.11.22 01:41 
в ответ Murr 29.11.22 23:26, Последний раз изменено 30.11.22 09:03 (alex445)
Ну попробуй пару сотен тысяч отредактировать поменяв Release/Debug на MyMode со специфическими требованиями...
А из специфических... скажем... все как в релизе, а для 20 классов - дебуг...

Ну, на всякие извраты - извращённые варианты решений. На то и существуют такие как вы - овнища всякие разгребать. Вам же хорошо платят за это? ))


Код и структура проекта должны быть чистыми, гладкими и шелковистыми ровными и понятными - так гуры всякие учат. А не клубок перепетий, где сам создатель уже через год нихрена не понимает, что происходит... Хотя, как раз на этом и выживают разные сантехники-семизнаки? ))


Я думаю всё же, что нормальные бабки были заработаны не на срочных вызовав "для прочистки труб". За такую работу заказчик не платит сильно много. Может, повыше обычного тарифа кодера на окладе, но всё равно не сильно много. А головняка и срочности у такой работы - хоть отбавляй. Не окупается оно по нервам, по-моему.

#27 
Программист коренной житель30.11.22 08:45
NEW 30.11.22 08:45 
в ответ Срыв покровов 29.11.22 22:30
я чот тоже не понимаю смысла в этом debug.assertВ режиме debug у меня студия итак реагирует на любое исключение.
да, оно вылезет только при обращёнии к неправильным данным, но даст мне сигнал копать причины.

Ну Debug.Assert'ом можно проверять не только на null. Тут работают любые булевые выражения. Например имеет смысл проверять таким образом длину списка, можно проверять состояние объекта или тип объекта... да много всего. Короче говоря Debug.Assert'ом проверяется ожидаемое состояние. И, кстати, код вполне может так или иначе решать проблему неправильного состояния, но при этом на стадии отладки полезно было бы остановиться в случае ошибки.

Простейший пример:

public bool IsFoo(IEnumarable list)
{
   Debug.Assert (list.Length > 0);
   int sum = 0;
   foreach (int item in list)
   {
      sum += item;
   }

   return sum > 0;
}



#28 
Программист коренной житель30.11.22 08:48
NEW 30.11.22 08:48 
в ответ Murr 29.11.22 23:20
Покопайся в архиве - у меня как-то инициализированная статическая переменная в процессе работы в нулл падала...

Нее, копаться в архивах я не буду :)

Ошибки в многопоточных приложениях отлавливаются не так легко. С этим никто и не спорит. Ну и статические переменные - зло :)

#29 
alex445 коренной житель30.11.22 09:06
NEW 30.11.22 09:06 
в ответ Программист 30.11.22 08:45
Ну Debug.Assert'ом можно проверять не только на null. Тут работают любые булевые выражения. Например имеет смысл проверять таким образом длину списка, можно проверять состояние объекта или тип объекта... да много всего. Короче говоря Debug.Assert'ом проверяется ожидаемое состояние. И, кстати, код вполне может так или иначе решать проблему неправильного состояния, но при этом на стадии отладки полезно было бы остановиться в случае ошибки.

Не проще тогда натолкать точек остановка с условиями? Тоже могут проверять сложные условия, тоже работают лишь в дебаге. Зато код захламлять не надо всякими непонятными вызовами классов, странно напоминающими юнит-тесты, но юнит-тестами не являющимися.

#30 
Программист коренной житель30.11.22 09:23
NEW 30.11.22 09:23 
в ответ alex445 30.11.22 09:06
Не проще тогда натолкать точек остановка с условиями?

Не проще. Точки остановки - это локальная штука, в студии на другом компьютере их уже не будет.

#31 
Срыв покровов Забанен до 7/7/25 16:05 патриот30.11.22 13:54
NEW 30.11.22 13:54 
в ответ Программист 30.11.22 09:23

с одной стороны аргумент

С другой - накуя мне наблюдать то, что релевантно для коллеги на другом этаже


#32 
Программист коренной житель30.11.22 16:59
NEW 30.11.22 16:59 
в ответ Срыв покровов 30.11.22 13:54
С другой - накуя мне наблюдать то, что релевантно для коллеги на другом этаже

Если тебе это не релевантно, то просто используй релиз сборку.

#33 
alex445 коренной житель30.11.22 17:06
NEW 30.11.22 17:06 
в ответ Программист 30.11.22 16:59

"Сам ты тупой юзер!" )))

#34 
Срыв покровов Забанен до 7/7/25 16:05 патриот30.11.22 19:20
NEW 30.11.22 19:20 
в ответ Программист 30.11.22 16:59

на релизе вроде есть какие-то ограничения по дебагу?

#35 
Программист коренной житель30.11.22 20:56
NEW 30.11.22 20:56 
в ответ Срыв покровов 30.11.22 19:20

Debug. в релиз сборках не работает, соответственно не оказывает никакого влияния на код, а значит взяв релиз сборку от "коллеги на другом этаже" ты не будешь наблюдать, что там для него релевантно :)

#36 
Срыв покровов Забанен до 7/7/25 16:05 патриот30.11.22 21:25
NEW 30.11.22 21:25 
в ответ Программист 30.11.22 20:56

это понятно

Но работают ли точки останова (кто-то так говорит?)


#37 
Программист коренной житель01.12.22 07:57
NEW 01.12.22 07:57 
в ответ Срыв покровов 30.11.22 21:25
Но работают ли точки останова (кто-то так говорит?)

Не совсем понимаю твой вопрос. Ты имеешь в виду, если ты установишь локальные точки останова и запустишь в режиме отладки релизную сборку? Если ты это имеешь в виду, то да, это работает, но с ограничениями. Сейчас с ходу не скажу с какими, помню, что полноценно отлаживать релиз сборку было весьма утомительно.

#38 
Murr патриот01.12.22 09:01
Murr
NEW 01.12.22 09:01 
в ответ Программист 30.11.22 08:48

в многопоточных

-----

А кто говорил про многопоточку? Там даже не мультиюзер был... обычная консольная задача.

#39 
Срыв покровов Забанен до 7/7/25 16:05 патриот01.12.22 14:34
NEW 01.12.22 14:34 
в ответ Программист 01.12.22 07:57

вот об этом я и говорил.

#40 
1 2 все