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
在许多情况下应该是足够的。
命令的地方或框架可以使用。 在哪里命令将给更多的信息与函数名称