我们怎样才能跳过 GDB 中的函数调用?
How can we step over a function call in GDB?
我想了解如何单步执行函数调用。例如,在下面最简单的程序中:
#include <iostream>
#include "test.h"
using std::cout;
using std::endl;
Uint u;
int main()
{
cout << "execution starting..." << endl;
cout << u.a << endl;
cout << "execution completed" << endl;
}
好的,我通过break 11
命令在第11行设置断点。现在我想跳过所有将被调用以打印 "execution starting..."
的指令,并在 operator <<
调用处停止以打印 endl
符号。我怎样才能做到这一点?我应该使用哪个命令?
在GDB中,step
表示进入(将进入调用的函数内部),next
表示跳过(继续并在下一行停止)。
但在你的特定情况下,next
可能不是你想要的,我建议先 step
到打印“执行开始...”的函数中,然后使用 finish
继续,直到 returns,这样程序将停止在 <<endl
。
如果设置了断点,那么只需使用continue
继续执行直到该断点。除非你想 完全跳过 这些调用,否则你只需将 $eip
或 $rip
设置为你的断点地址,例如
set $[e|r]ip=0x[your_address]
我想了解如何单步执行函数调用。例如,在下面最简单的程序中:
#include <iostream>
#include "test.h"
using std::cout;
using std::endl;
Uint u;
int main()
{
cout << "execution starting..." << endl;
cout << u.a << endl;
cout << "execution completed" << endl;
}
好的,我通过break 11
命令在第11行设置断点。现在我想跳过所有将被调用以打印 "execution starting..."
的指令,并在 operator <<
调用处停止以打印 endl
符号。我怎样才能做到这一点?我应该使用哪个命令?
在GDB中,step
表示进入(将进入调用的函数内部),next
表示跳过(继续并在下一行停止)。
但在你的特定情况下,next
可能不是你想要的,我建议先 step
到打印“执行开始...”的函数中,然后使用 finish
继续,直到 returns,这样程序将停止在 <<endl
。
如果设置了断点,那么只需使用continue
继续执行直到该断点。除非你想 完全跳过 这些调用,否则你只需将 $eip
或 $rip
设置为你的断点地址,例如
set $[e|r]ip=0x[your_address]