gdb:如何打印当前行或find当前行号?

list命令打印一组行,但我需要一个单一的行,我在哪里,可能发生错误。

我在debugging的时候得到了相同的信息。 虽然不是当我正在检查堆栈跟踪。 很可能你会使用我认为的优化标志。 检查这个链接 – 有关的东西。

尝试编译与-g3删除任何优化标志。 那么它可能会工作。 HTH!

'frame'命令会给你你正在寻找的东西。 (这可以简写为'f')。 这里是一个例子:

 (gdb) frame \#0 zmq::xsub_t::xrecv (this=0x617180, msg_=0x7ffff00008e0) at xsub.cpp:139 139 int rc = fq.recv (msg_); (gdb) 

没有论据,“框架”只是告诉你你在哪里(用一个参数改变框架)。 关于frame命令的更多信息可以在这里find。

请记住,gdb是一个function强大的命令,具有低级别的指令能力,因此与assembly概念有关。

你在找什么叫de指令指针,即:

指令指针寄存器指向处理器将要尝试执行的内存地址。 指令指针在16位模式下称为ip ,在32位模式下为eip ,在64位模式下为翻转

更多细节在这里

gdb执行中可用的所有寄存器可以显示为:

 (gdb) info registers 

用它你可以find你的程序正在运行的模式(查看哪些寄存器存在)

然后(这里使用最常用的注册rip ,如果需要,可以用eip或非常less的ipreplace):

 (gdb)info line *$rip 

会显示行号和文件来源

 (gdb) list *$rip 

会告诉你,前后几行

但可能

 (gdb) frame 

在许多情况下应该是足够的。

命令的地方框架可以使用。 在哪里命令将给更多的信息与函数名称