繁体   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