Является ли <value optimized out> в gdb проблемой? - PullRequest
9 голосов
/ 16 февраля 2010

У меня есть приложение, которое падает только при оптимизации -O2 (скомпилировано с gcc 4.2.4). Когда я перебираю код и добираюсь до места, где происходит сбой, и пытаюсь проверить значение, я получаю «оптимизированное значение» в gdb.

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

Спасибо!

Ответы [ 5 ]

11 голосов
/ 16 февраля 2010

Вероятность ошибки 99% в вашем коде и 1% вероятности - ошибка генерации кода компилятора. Поэтому потратьте пропорциональное количество времени на поиск скрытых ошибок в своем коде, но имейте в виду, что вы просто можете обнаружили ошибку генерации кода (в этом случае вам нужно внимательно изучить сгенерированный компилятором код, чтобы увидеть в чем проблема).

5 голосов
/ 16 февраля 2010

попробуйте info registers в ГБД.

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

2 голосов
/ 16 февраля 2010

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

0 голосов
/ 11 апреля 2011

Следует обратить внимание на псевдонимы указателей, когда компилятор может делать предположения, которые вы не соблюдаете, например, указатель, передаваемый в функцию, не указывает на глобальную переменную, также используемую этой функцией. Но вы можете контролировать это с помощью параметров компилятора и т. Д.

0 голосов
/ 16 февраля 2010

Это не проблема, это скорее проблема агрессивной оптимизации в новых версиях gcc.

См .: План исправления отладочной информации локальной переменной в GCC .

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