![](/img/trans.png)
[英]“Warning: Can't find linker symbol for virtual table for value XXX value” using GCC and GDB (CodeBlocks)
[英]Why can't GDB find symbol from address with info symbol?
在嘗試調試一些簡單的代碼時,我無法讓 GDB 從帶有info symbol
的 memory 地址中識別局部變量。
該代碼是使用g++ -g3 -Wall -Wextra
編譯的。
int main()
{
int foo = 1234;
return foo;
}
(gdb) p foo
$1 = 1234
(gdb) p &foo
$2 = (int *) 0x7fffffffd7c4
(gdb) info symbol 0x7fffffffd7c4
No symbol matches 0x7fffffffd7c4.
(gdb) info address foo
Symbol "foo" is a complex DWARF expression:
0: DW_OP_fbreg -28
.
為什么GDB在這種情況下不能識別變量? info symbol
是否僅適用於全局對象?
局部變量駐留在堆棧或寄存器中。 訪問堆棧與程序的符號表無關。 如檢查符號表中所述
本章描述的命令允許您查詢程序中定義的符號(變量名、函數名和類型)。 此信息是程序文本中固有的,不會隨着程序的執行而改變。
局部變量在 position 中永遠不會保持不變,因為堆棧幀的當前 position 取決於調用深度和許多其他因素。 局部變量根本不是程序符號表的一部分,因此您無法使用symbol
命令檢查它們。
您可以通過簡單地從 shell 調用nm
來查看符號表中的內容,也許還可以使用 c++filt 來獲得可讀的名稱。
> nm|c++filt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.