Подтвердить что ты не робот

Что означает <значение оптимизировано> в gdb?

(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 может оптимизировать мое значение?

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

Значения аргументов, которые не были сохранены в их кадрах стека, отображаются как "оптимизированное значение".

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

Ответ 4

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