Как местоположение точки останова может повлиять на обнаружение ошибки? - PullRequest
1 голос
/ 12 ноября 2010

В этом сообщении об ошибке MSO , наши собственные вафли делают следующее наблюдение:

Эта ошибка также является ошибкой heisenbug, при отладке, если ваша первая точка останова слишком рано, пошаговое выполнение показывает, что все хорошо.

(Ссылка: Википедия запись о Гейзенбагс )

Как вообще возможно, что расположение точки останова влияет на появление ошибки?

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

Ответы [ 2 ]

2 голосов
/ 12 ноября 2010

Распространенным источником является синхронизация, в частности, с несколькими потоками.

Допустим, у вас есть приложение с графическим интерфейсом пользователя с некоторыми обработчиками событий и ошибка, при которой выбор таблицы обрабатывается неправильно, возможно, из-за того, что Swing иногда начинает обновлятьтаблица до обработки вашего события.

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

2 голосов
/ 12 ноября 2010

Если происходит какая-либо асинхронная активность, это может повлиять на heisenbugs .например, потоки, ввод / вывод, прерывания и т. д. Установка точек останова в разных местах может повлиять на относительную синхронизацию основного потока и асинхронные события, которые могут потенциально привести к появлению или исчезновению связанных ошибок.

...