【问题标题】:gdb how to find where the function exitedgdb如何找到函数退出的位置
【发布时间】:2018-05-28 14:07:32
【问题描述】:

我通过附加到正在运行的程序在函数上设置了断点。该函数很长,并且从多个位置返回相同的错误值。有什么方法可以找出函数退出的位置,而无需逐行遍历或在所有返回值上放置断点?

有完成命令给我返回值,但它没有说明它退出的位置。

提前致谢

【问题讨论】:

  • 通过在每个返回语句上放置断点。
  • 用析构函数创建一个虚拟类。在自动作用域中声明此变量,在函数的开头,并在其析构函数中设置断点。当断点命中时,您可以up 回溯以找出析构函数是从哪里调用的。
  • “从多个地方返回相同的错误值” - 如果尚未使用,请考虑使用 errno。即该函数可以在多个地方返回'相同的错误',并且该函数还可以将“errno”设置为方便的东西,也许是“errno = _ LINE _;注意“几个标准库函数通过将正整数写入errno来指示错误." 我见过几个函数返回-1,errno描述错误的地方。(常见的成语)
  • @DOUGLAS O. MOEN 不要这样滥用errno
  • @JesperJuhl - 不滥用。这种用法很常见。在这种情况下,根据 OPs 问题,如何“找出函数退出的位置而不单步执行每一行或在所有返回值上放置断点”变得微不足道。

标签: c++ c gdb


【解决方案1】:

启用reverse debugging,然后在函数调用后放置一个断点。一旦断点被​​命中,执行reverse-next/reverse-step 以返回到终止函数的返回语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 2019-02-01
    • 2016-04-12
    • 1970-01-01
    相关资源
    最近更新 更多