我一直试图找到一种方法来自动化GDB中跟踪程序控制流程的进度.
即使只是一种自动执行n命令的简单方法,您也可以查看调用例程的顺序.
我意识到你可以发出n xx是GDB逐步执行的次数的问题,但问题在于它显示的是命令而不是例程的地址!但是如果你n在GDB中手动按下(然后按回车键发出上一个命令),它会显示地址.
我在GDB中尝试了以下内容:
(after setting a breakpoint at say 0x0123456)
b *0x0123456
Run Code Online (Sandbox Code Playgroud)
GDB说<breakpoint 1 at 0x123456>.我键入:
commands 1
n 1000
c
end
Run Code Online (Sandbox Code Playgroud)
但它没有按预期循环,也没有显示地址位置:-(.
任何帮助,将不胜感激!当然必须简单的自动登录命令例程被调用??
这段代码:
int main()
{
char buffer[64];
int check;
...
Run Code Online (Sandbox Code Playgroud)
如你所见,check声明为AFTER buffer,所以在堆栈中,我们必须在堆栈中有check ABOVE buffer吗?
但是,当我用gdb反汇编(x86)时,这就是我得到的:
- > check在0xbffff4f8
- > buffer在0xbffff4b8
我的问题:堆栈中是否存在局部变量的特定顺序?
另外,我必须告诉你,我在另一台计算机上尝试了同样的事情(x86也是,gcc编译选项相同,但gdb版本和linux发行版不同),顺序不一样......:S
谢谢 !