блок отладчика [закрывается]

Это очень актуально, если вы пишете C # на Windows. Не все функции Win32 были представлены через библиотеки .Net. Конкретным примером этого является метод сообщения WM_SETREDRAW, который я описываю здесь: WM_SETREDRAW . Это также необходимо в другое время для решения проблем управления.

Кроме того, понимание того, как работают Win32 и Windows, даст вам лучшее понимание различных аспектов C # /. Net, таких как:

  • Что на самом деле делает Control.Invoke ()?
  • В чем разница между Control.BeginInvoke и Control.Invoke?
  • Что фактически вызывает события моего элемента управления, например OnClick и т. Д. И как я могу это отладить.

Тем не менее, WPF меняет все это, и если вы пишете только код .Net 3 / 3.5, мой аргумент теряет свою актуальность.

6
задан JoelFan 27 May 2009 в 11:58
поделиться

10 ответов

Когда меня так блокируют, лучший совет, который я нашел, - уходить какое-то время. Собираетесь ли вы на длинный обед или уезжаете на день. Вернитесь свежим и взгляните по-новому. Большую часть времени ответ будет смотреть вам в глаза. Пока мне было недостаточно 10-минутного перерыва на кофе, но ваш опыт может отличаться.

Во-вторых, поговорите со своими сверстниками. Пройдите через все, что вы пробовали. Просто попросите их выслушать, и пока вы будете говорить об этом много раз, ответ придет к вам.

Это как раз те два, которые я использую чаще всего, когда я блокирую отладку.

11
ответ дан 8 December 2019 в 05:57
поделиться
  • Пятиминутный перерыв

Крайне важно, чтобы вы не разбили клавиатуру.

  • Объясните проблему по электронной почте своей сестре

или своему двухлетнему сыну. Тот, кто не поймет ни слова *, если вы не объясните его очень четко. Вам не нужно отправлять электронное письмо, вам просто нужно быть уверенным, что вы понимаете его наизнанку. Вы удивитесь, сколько раз простое повторение проблемы внезапно делает очевидным, в чем вы ошиблись. Это хороший способ узнать, каковы были ваши предположения о проблеме, и почему они не обязательно могут быть правильными.

* Эта ссылка ведет к отличному ответу JaredPar на другой вопрос SO.

  • Поговорите с коллегой

К этому моменту вы уже «отправили по электронной почте» семье pet, так что вы знаете, что, надеюсь, вы рассмотрели все глупые аспекты, пора поговорить с реальным человеком. Возможно, в прошлом они пережили что-то неясное, что напоминает им об этой ситуации, и у них определенно будет другая точка зрения. Постарайтесь понять, в чем проблема, а не то, что вы думаете . Вы не хотите предвзято относиться к ним. Вы можете и должны говорить о том, что они пробовали, и объяснять, почему вы думаете, что проблема именно в этой области (вы, вероятно, правы), но вы не хотите закрывать свое внимание их предложениям, даже если они этого не делают. кажется правильным.

  • Посмотрите на код еще раз.

К этому времени вы должны быть менее жестокими и должны быть вооружены новыми идеями. Начните с повторной проверки ошибки. Это простой шаг, но я часами расстраивался из-за ошибки, которая была в нашем тестовом сценарии, а не в нашем коде. Как только вы снова подтвердите ошибку, начните с самого начала. Проверяйте ВСЕ. Установите точку останова в последней точке, в которой вы уверены на 100%, а затем двигайтесь вперед, пока не обнаружите, что результат снова не работает. Это огромный успех, потому что теперь у вас есть, надеюсь, меньший блок кода для исследования. Затем, если необходимо, обратитесь к коллеге, чтобы посмотреть на действующий код.

мы часами расстраивались из-за ошибки, которая была в нашем тестовом сценарии, а не в нашем коде. Как только вы снова подтвердите ошибку, начните с самого начала. Проверяйте ВСЕ. Установите точку останова в последней точке, в которой вы уверены на 100%, а затем двигайтесь вперед, пока не обнаружите, что результат снова не работает. Это огромный успех, потому что теперь у вас есть, надеюсь, меньший блок кода для исследования. Затем, если необходимо, обратитесь к коллеге, чтобы посмотреть на действующий код.

мы часами расстраивались из-за ошибки, которая была в нашем тестовом сценарии, а не в нашем коде. Как только вы снова подтвердите ошибку, начните с самого начала. Проверяйте ВСЕ. Установите точку останова в последней точке, в которой вы уверены на 100%, а затем двигайтесь вперед, пока не обнаружите, что результат снова не работает. Это огромный успех, потому что теперь у вас есть, надеюсь, меньший блок кода для исследования. Затем, если необходимо, обратитесь к коллеге, чтобы посмотреть на действующий код.

Огромный успех, потому что теперь у вас есть, надеюсь, меньший блок кода для исследования. Затем, если необходимо, обратитесь к коллеге, чтобы посмотреть на действующий код.

Огромный успех, потому что теперь у вас есть, надеюсь, меньший блок кода для исследования. Затем, если необходимо, обратитесь к коллеге, чтобы посмотреть на действующий код.

5
ответ дан 8 December 2019 в 05:57
поделиться

Обычно я делаю перерыв ... если это не помогает, я сплю, решая проблему. (На самом деле, если честно, я должен сказать, что провожу бессонную ночь, обдумывая проблему.)

У меня почти всегда есть список возможных решений, готовый к утру. : -)

3
ответ дан 8 December 2019 в 05:57
поделиться

Обычно я делаю несколько шагов:

  • посмотрите на код, который участвует в функциональности, которая содержит ошибку и размещает сообщения журнала таким образом, чтобы они помогли мне сузить проблему (это позволяет вам посмотреть на регистратор позже, когда вы больше не раздражены, и, возможно, найти полезные подсказки: P)
  • попросить моих старших коллег дать подсказку
  • позвонить клиенту, чтобы иметь четкое представление о том, когда возникает проблема
2
ответ дан 8 December 2019 в 05:57
поделиться

Обычно я пребываю в таком настроении, когда не использовал структурный подход с самого начала. Итеративно сужая область, в которой может существовать проблема, и пытаясь написать наименьшую кодовую базу, которая может воспроизвести ошибку, я еще не потерпел неудачу.

1
ответ дан 8 December 2019 в 05:57
поделиться

Другие упоминали перерыв или "сон на нем". Этот метод известен как (помимо прочего) инкубация. Как только вы примете эту идею, вы сможете продвинуться и дальше.

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

0
ответ дан 8 December 2019 в 05:57
поделиться

Я думаю, что если вы столкнетесь с подобной проблемой, пора провести серьезный рефакторинг ...

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

0
ответ дан 8 December 2019 в 05:57
поделиться

Попробуйте методику принятия душа Дэвида Ангарса ":

" Если вы знаете, что печатать, печатайте. Если вы не знаете, что печатать, примите душ и оставайтесь в душе, пока не научитесь, что печатать "

Этот вид вызывает то, что большинство любит делать. Сделай перерыв! Неважно, что это за разрыв, пока вы не думаете о том, чем занимались до перерыва. Отвлечение в любой форме - это хорошо.

Ура!

0
ответ дан 8 December 2019 в 05:57
поделиться

Еще один хороший вариант - поделиться идеями с другими разработчиками / членами команды. Иногда они будут задавать вам вопросы, которые вы не задумывались.

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

0
ответ дан 8 December 2019 в 05:57
поделиться

Я обычно тестирую метод / функцию, вызывающую нарушение, шаг за шагом. И не думайте, что ошибка исходит оттуда, она могла быть откуда-то до нее.

Используйте правильный отладчик, не используйте серию printfs.

0
ответ дан 8 December 2019 в 05:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: