(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 может оптимизировать мое значение?
Ответ 1
Это означает, что вы скомпилированы, например. gcc -O3 и оптимизатор gcc обнаружил, что некоторые из ваших переменных были избыточными, что позволило им оптимизироваться. В этом конкретном случае у вас есть три переменные a, b, c с одинаковым значением и, предположительно, все они могут быть привязаны к одной переменной. Компиляция с отключенной оптимизацией, например. gcc -O0, если вы хотите увидеть такие переменные (это вообще хорошая идея для отладочных построений в любом случае).
Ответ 2
Это не так. Ваш компилятор сделал, но есть еще символ отладки для исходного имени переменной.
Значения аргументов, которые не были сохранены в их кадрах стека, отображаются как "оптимизированное значение".
Я предполагаю, что вы скомпилированы с -O (somevalue) и получаете доступ к переменным a, b, c в функции, где была выполнена оптимизация.
Ответ 4
Просто запустите "export COPTS = '- g -O0"; и перестройте свой код. После восстановления отлаживайте его с помощью gdb. Вы не увидите такую ошибку. Спасибо.