簡體   English   中英

gdb 何時將變量標記為“不可用”?

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

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