C gdb能否进入if';s条件函数?

C gdb能否进入if';s条件函数?,c,linux,debugging,gdb,C,Linux,Debugging,Gdb,我只是想知道如何使用gdb访问if条件函数 代码如下: gdb的表现是这样的: 我想访问if的条件loadcatalog(),但我不能这样做 有没有办法访问该功能 请告诉我如何处理此问题。您必须在gdb中使用'step'或's'命令才能进入函数定义。指令将根据您的需要在函数中单步插入一行。如果它似乎跳过了这一行(如您所描述的),这意味着函数中没有要单步执行的“行”——要么因为函数是内联的,要么因为它位于另一个编译单元中,没有调试信息 在后一种情况下,您可能会发现stepi(si)命令很有用——它

我只是想知道如何使用gdb访问if条件函数

代码如下: gdb的表现是这样的: 我想访问if的条件
loadcatalog()
,但我不能这样做 有没有办法访问该功能


请告诉我如何处理此问题。

您必须在gdb中使用'step'或's'命令才能进入函数定义。

指令将根据您的需要在函数中单步插入一行。如果它似乎跳过了这一行(如您所描述的),这意味着函数中没有要单步执行的“行”——要么因为函数是内联的,要么因为它位于另一个编译单元中,没有调试信息

在后一种情况下,您可能会发现
stepi
si
)命令很有用——它通过一条机器指令执行步骤。当您这样做时,源代码行将保持不变,但实际上您已经进入了该行的一部分

我发现在我的
.gdbinit
文件中定义别名很有用:

define sx
  si
  x /1i $pc
end
document sx
    Step one instruction and print next instruction
end

它定义了一个
sx
命令,该命令的工作原理与
si
类似,但也会将下一条机器指令反汇编成后续运行的指令。因此,它更像是机器代码级别的
步骤。使用
nexti
nx
也很有用。

我使用了步骤,但。。。。下一行就行了。想进入第260行函数加载目录,但无法进入函数,这就是为什么我想知道如何处理这个问题。
stepi
可以工作吗?我没有测试它,但是我发现
gdb
有这个命令,它的意思是
第一步指令完全是
,而不是
步骤程序,直到它到达另一个源代码行,这是
s
命令的描述。我测试了
s
命令,我发现它可以在if条件下单步执行函数,为什么您的不能?请使用前面的
step
printf(“加载目录…”)
几乎肯定是来自您尝试进入的函数。示例会话中的第一个“下一步”可能是“步骤”。
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) 
define sx
  si
  x /1i $pc
end
document sx
    Step one instruction and print next instruction
end