[英]When does gdb mark a variable as “not available”?
我對 GDB 還很陌生,我還沒有找到類似的問題,而且我的谷歌搜索是徒勞的,所以就這樣吧。
我正在使用 GDB 通過 COM 端口連接到基於 PowerPC 的遠程板,並且我遇到了斷點。 這是我的(非常編輯的)GDB session。
(gdb) where
#0 WaitForStuff () at graphfile.c:1234
#1 0x00012af4 in WaitForOtherStuff () at graph.c:2345
#2 0x001d0a7c in DrawScreens (DefaultScreenFct=0x2bef02 <DefaultFct>,
SecondScreenFct=0x2bef02 <DefaultFct>, DrawBothPages=Variable "DrawBothPages"
is not available.
[...]
(gdb)
這是第 2 幀中 function 的聲明:
void DrawScreens(void (*DefaultScreenFct)(void), void (*SecondScreenFct)(void),
const BOOLEAN DrawBothPages);
這就是我迷失的地方:為什么這個變量“不可用”,我怎樣才能讓它“可用”? 我已經使用帶有 -g3 開關的 GCC 編譯了程序,以防萬一我需要更多信息,但我得到了同樣的錯誤。 我還刪除了我們使用的 -O 標志。 會不會是BOOLEAN
typedef (只是一個unsigned char
)? 或者可能是參數的const
? 我覺得奇怪的是 GDB 甚至不給我一個我可以查看的地址。
謝謝 !
-O
打開GCC 中的優化(相當於-O1
)。
您想使用-O0
關閉優化(並且是默認設置)。
此外,PowerPC 的 ABI 可能會在寄存器中傳遞參數。 我不知道-O0
是否會導致 GCC 將參數鏡像到 function 中的堆棧 memory 位置。
通常它在一個寄存器中,並且已經被刷新或別名為其他東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.