локальные переменные в конструкторах не отслеживаются. Это ошибка в GDB? - PullRequest
4 голосов
/ 22 октября 2008

В настоящее время я работаю с gdb версии 6.7.1 в Ubuntu Linux и работаю в проекте C ++.

Удивительно, но я пытался отладить конструктор и обнаружил, что локальные переменные, объявленные в рамках конструктора, не отслеживаются и не замечаются GDB. Это ошибка?

Спасибо за любую информацию ..

Ответы [ 3 ]

5 голосов
/ 05 декабря 2008

Это ошибка в GCC, а не в GDB.

Это было недавно исправлено .

2 голосов
/ 22 октября 2008

Похоже, вы отлаживаете оптимизированную сборку.

Отладчик «знает» значение ваших локальных переменных, потому что файл символов описывает их расположение в кадре стека функций.

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

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

2 голосов
/ 22 октября 2008

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

Обратите внимание, что даже при отсутствии оптимизации некоторые тривиальные оптимизации все еще выполняются, но они не должны сильно мешать отладке. Кроме того, при интенсивном использовании C ++ (включая STL) ваша программа может стать намного медленнее без оптимизации.

...