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