我只是想知道如果使用gdb
来访问条件函数if(loadCatalogue(cat, filename)) {
printf("Success.\n");
}
else {
perror("Unable to load catalogue");
}
256 readLine("Enter name of catalogue file to load: ",
(gdb) next
Enter name of catalogue file to load: cat.txt
259 printf("Loading catalogue '%s'...\n", filename);
(gdb) next
Loading catalogue 'cat.txt'...
260 if(loadCatalogue(cat, filename)) {
(gdb) step
261 printf("Success.\n");
(gdb)
如果条件为loadCatalogue()
我想访问,但我不能这样做
有没有办法访问该功能?
请告诉我如何处理此事。
答案 0 :(得分:3)
step
或s
指令会根据需要在函数中单行显示一行。如果它似乎跳过了这一行(正如你所描述的那样),那意味着函数中没有“行”可以步进 - 因为函数是内联的,或者是因为它在另一个没有调试信息的编译单元中
在后一种情况下,您可能会发现stepi
(si
)命令很有用 - 这可以通过单个机器指令完成。执行此操作时,源行将保持不变,但实际上您已进入该行。
我发现在我的.gdbinit
文件中定义别名很有用:
define sx
si
x /1i $pc
end
document sx
Step one instruction and print next instruction
end
定义了一个sx
命令,它的工作方式与si
类似,但也可以反汇编下一个要运行的机器指令。所以它更像是机器代码级别的step
。让nx
使用nexti
也很有用。
答案 1 :(得分:0)
你必须使用' step'或者' s' gdb中的命令进入函数定义。