gdb可以进入if条件函数吗?

时间:2016-05-18 10:00:49

标签: c linux debugging gdb

我只是想知道如果使用gdb

来访问条件函数

代码就是这样:

if(loadCatalogue(cat, filename)) {
    printf("Success.\n");
}
else {
    perror("Unable to load catalogue");
}

并且gdb显示如下:

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()我想访问,但我不能这样做 有没有办法访问该功能?

请告诉我如何处理此事。

2 个答案:

答案 0 :(得分:3)

steps指令会根据需要在函数中单行显示一行。如果它似乎跳过了这一行(正如你所描述的那样),那意味着函数中没有“行”可以步进 - 因为函数是内联的,或者是因为它在另一个没有调试信息的编译单元中

在后一种情况下,您可能会发现stepisi)命令很有用 - 这可以通过单个机器指令完成。执行此操作时,源行将保持不变,但实际上您已进入该行。

我发现在我的.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中的命令进入函数定义。