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

10
задан Bhargav Rao 18 August 2019 в 02:38
поделиться

5 ответов

Два решения:

a) Используйте отладчик для бедняков (выводите на консоль) или используйте структуру ведения журнала. После возникновения ошибки проанализируйте вывод.

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

11
ответ дан 3 December 2019 в 18:35
поделиться

Я попытался проверить свои предположения, которые я сделал, и проверить их еще раз.

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

Мое личное решение было специфичным для Java. Java ClassLoader не загружает классы полностью, начиная с JDK 1.5. В сеансе отладки он должен быть полностью загружен. Таким образом, некоторые переменные не были правильно инициализированы, и результат отличался от обычного запуска.
Эту причину очень трудно найти.

2
ответ дан 3 December 2019 в 18:35
поделиться

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

6
ответ дан 3 December 2019 в 18:35
поделиться

It's really difficult to debug multi threaded applications.

You can try to debug using the old System.out.println technic instead of using the debugger ... may be this will allow you to debug while having the different behavior you mentioned.

Manu

2
ответ дан 3 December 2019 в 18:35
поделиться

Check some easy stuff first. Does the crashing version get the same command line arguments? Or special environment variables? Or user ID? Or some other factor you know to be important. In other words, are you really running it with the same input, as it were. Все время вылетает? Там же вылетает? Если вы можете подключить отладчик после сбоя, где он сломался, это может дать некоторые подсказки. Возможно, виновато какое-то недавнее изменение? Если это так, попробуйте удалить его и посмотрите, что произойдет.

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

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

Вот пара отрывков из книг, которые могут помочь вам «отлаживать без отладчика».

Глава 5, «Отладка» из «Практика программирования»

0
ответ дан 3 December 2019 в 18:35
поделиться