list命令打印一组行,但我需要一行:我目前所在的位置以及可能发生错误的位置。
list
wqsoz72f1#
“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'只是告诉你你在哪里(有参数它会改变框架)。有关frame命令的更多信息,请参阅here。
9vw9lbht2#
命令其中或frame可以使用。其中命令将给予函数名称的更多信息
mgdq6dx13#
我在调试时确实得到了同样的信息。不过,我检查堆栈跟踪的时候不行。我想你很可能会使用优化标志。看看这个link-相关的东西。尝试使用-g3编译删除任何优化标志。那就可能成功了HTH!
-g3
wr98u20j4#
请记住,gdb是一个功能强大的命令-能够执行低级指令-因此与汇编概念相关联。你要找的东西叫做de指令指针,即:指令指针寄存器指向处理器接下来将尝试执行的存储器地址。指令指针在16位模式下称为ip,在32位模式下称为eip,在64位模式下称为rip。更多详情heregdb执行中可用的所有寄存器可以用以下方式显示:
(gdb) info registers
有了它,你可以找到你的程序运行的模式(看看这些寄存器中存在哪些)然后(这里使用现在最常见的寄存器rip,如果需要,用eip或很少用ip替换):
(gdb)info line *$rip
将显示行号和文件源
(gdb) list *$rip
我会给你们看这条线的前后部分但很可能
(gdb) frame
在很多情况下就足够了。
guykilcj5#
所有其他答案都是正确的,但我更喜欢使用TUI mode(Ctrl+X+A或tui enable),它在一个单独的窗口中显示您的位置和功能,这对用户非常有帮助。希望这也有帮助。
tui enable
5条答案
按热度按时间wqsoz72f1#
“frame”命令将为您提供所需的内容。(这可以缩写为“f”)。下面是一个例子:
如果没有参数,'frame'只是告诉你你在哪里(有参数它会改变框架)。有关frame命令的更多信息,请参阅here。
9vw9lbht2#
命令其中或frame可以使用。其中命令将给予函数名称的更多信息
mgdq6dx13#
我在调试时确实得到了同样的信息。不过,我检查堆栈跟踪的时候不行。我想你很可能会使用优化标志。看看这个link-相关的东西。
尝试使用
-g3
编译删除任何优化标志。那就可能成功了HTH!wr98u20j4#
请记住,gdb是一个功能强大的命令-能够执行低级指令-因此与汇编概念相关联。
你要找的东西叫做de指令指针,即:
指令指针寄存器指向处理器接下来将尝试执行的存储器地址。指令指针在16位模式下称为ip,在32位模式下称为eip,在64位模式下称为rip。
更多详情here
gdb执行中可用的所有寄存器可以用以下方式显示:
有了它,你可以找到你的程序运行的模式(看看这些寄存器中存在哪些)
然后(这里使用现在最常见的寄存器rip,如果需要,用eip或很少用ip替换):
将显示行号和文件源
我会给你们看这条线的前后部分
但很可能
在很多情况下就足够了。
guykilcj5#
所有其他答案都是正确的,但我更喜欢使用TUI mode(Ctrl+X+A或
tui enable
),它在一个单独的窗口中显示您的位置和功能,这对用户非常有帮助。希望这也有帮助。