Что означает <value optimized out> в gdb? - PullRequest
56 голосов
/ 31 марта 2011
(gdb) n
134   a = b = c = 0xdeadbeef + ((uint32_t)length) + initval;
(gdb) n
(gdb) p a
$30 = <value optimized out>
(gdb) p b
$31 = <value optimized out>
(gdb) p c
$32 = 3735928563

Как GDB может оптимизировать мое значение ??

Ответы [ 4 ]

51 голосов
/ 31 марта 2011

Это означает, что вы скомпилировали, например, gcc -O3, и оптимизатор gcc обнаружил, что некоторые из ваших переменных были в некотором роде избыточными, что позволило их оптимизировать.В этом конкретном случае у вас, по-видимому, три переменные a, b, c с одинаковым значением, и, вероятно, все они могут быть привязаны к одной переменной.Компиляция с отключенной оптимизацией, например, gcc -O0, если вы хотите видеть такие переменные (в любом случае, это хорошая идея для отладочных сборок).

5 голосов
/ 31 марта 2011

Это не так. Ваш компилятор сделал, но для исходного имени переменной все еще есть символ отладки.

3 голосов
/ 31 марта 2011

С https://idlebox.net/2010/apidocs/gdb-7.0.zip/gdb_9.html

Значения аргументов, которые не были сохранены в их кадрах стека, отображаются как 'value optimized out'.

Я предполагаю, что вы скомпилировали с -O (somevalue)и обращаются к переменным a, b, c в функции, где произошла оптимизация.

0 голосов
/ 30 июня 2016

Просто запустите "export COPTS = '- g -O0';" и пересоберите свой код. После восстановления отладьте его с помощью gdb. Вы не увидите такой ошибки. Спасибо.

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