我是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);
这就是我迷失的地方:为什么这个变量“不可用”,我怎么能让它“可用”?我使用GCC和-g3开关编译了程序,以防万一我需要更多信息但是我得到了同样的错误。我还删除了我们使用的-O标志。可能是BOOLEAN
typedef(只是unsigned char
)吗?或者可能是参数的const
?我觉得很奇怪,GDB甚至不会给我一个我能看到的地址。
谢谢!
答案 0 :(得分:4)
-O
在GCC中启用 优化(相当于-O1
)。
您希望使用-O0
关闭优化(并且是默认设置)。
此外,PowerPC的ABI可能会传递寄存器中的参数。我不知道-O0
是否会导致GCC将参数镜像到函数中的堆栈内存位置。
答案 1 :(得分:2)
通常它位于一个寄存器中,并且已被刷新或别名。