печать переменных в GDB, кажется, меняет поведение кода? - PullRequest
0 голосов
/ 18 мая 2018

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

Я запускаю его на отладчике.Я остановился на конкретном операторе if в более крупном цикле, мне нужна часть «else» цикла for для обновления некоторых переменных, но он никогда не выполнялся;подразумевая, что переменная, которая проверяется в операторе 'if', всегда имеет значение true.

В конце концов я вошел в вызов метода (простой метод получения на частном логическом значении) и напечатал содержимое переменной.Когда я печатаю переменную, она ложна, и когда я вернусь, будет введен метод 'else'.

Чтобы экспериментировать, я пытался позволить циклу работать в течение 10 минут, метод 'else' никогда не бываетвведено (как указано, точка останова не была нажата).Затем, когда я печатаю проверяемую переменную, она ложная, и переменная вводится.Не имеет значения, как долго я запускаю его, или сколько раз я ломаю и продолжаю перед печатью переменной, сохраняется тот же шаблон, я ввожу метод 'else' IFF Я печатаю содержимое переменной, которая проверяется первой.

Чтобы исключить какие-либо данные, которые я пытался отследить на рассматриваемой точке останова, в течение времени, которое требуется для выполнения оператора печати, задержка без печати не приводит к вводу 'Метод else '.

Что может вызвать такое странное поведение?Так как у нас были проблемы с различными архитектурами, при запуске 32-битной программы в 64-битной ОС и, что более важно, используемый ею драйвер не тестировался в течение 32-х лет в течение многих лет, пока они не перекомпилировали драйвер для меня под 32-битной архитектурой, котораяЯ бы заподозрил водителя, за исключением того, что конкретная строка кода, которая плохо себя ведет, никак не касается драйвера.Тем не менее, я подозреваю, что какое-то переполнение или переполнение может происходить из-за путаницы, вызванной попыткой заставить работать старую 32-битную программу.

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

Черт возьми, Джим, я программист, а не квантовая механика!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...