【发布时间】:2011-05-26 20:33:26
【问题描述】:
我对 GDB 还很陌生,还没有找到类似的问题,而且我的谷歌搜索是徒劳的,所以就这样吧。
我正在使用 GDB 通过 COM 端口连接到基于 PowerPC 的远程板,并且我遇到了断点。这是我的(非常编辑的)GDB 会话。
(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 帧的函数声明:
void DrawScreens(void (*DefaultScreenFct)(void), void (*SecondScreenFct)(void),
const BOOLEAN DrawBothPages);
这就是我迷失的地方:为什么这个变量“不可用”,我怎样才能让它“可用”?我已经使用带有 -g3 开关的 GCC 编译了程序,以防我需要更多信息,但我得到了同样的错误。我还删除了我们使用的 -O 标志。会不会是BOOLEAN typedef(只是unsigned char)?或者可能是参数的constness?我觉得奇怪的是,GDB 甚至不给我一个我可以看的地址。
谢谢!
【问题讨论】:
-
尝试 -O0 作为 gcc 标志。这是为了“不优化”。没有 -O 标志并不一定意味着优化
-
当您使用
-v选项时,GCC 所说的是target:。 -
去掉了优化,你确定文件被重新编译了吗?增量构建可能不会导致重新编译。
-
@Michael Blurr :
Target: powerpc-eabi这是正确的目标。