簡體   English   中英

為什么 GDB 不能從帶有信息符號的地址中找到符號?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM