【问题标题】:Have error output include last couple lines of code有错误输出包括最后几行代码
【发布时间】:2013-04-15 12:36:51
【问题描述】:

有没有可能,如果有,你会如何让错误输出包含最后几行代码?我知道 GNU g++ 对 __LINE____FUNC__ 的支持,但它们只将行号作为 int 和函数名作为字符串给出 - 我想转储失败的代码或至少最后几个命令的函数由程序执行。

我在想也许可以编写一个 m4 脚本来解析代码库并注入它们所放入函数的字符串结构(当然不包括它们自己)。

还有其他/更好的想法吗?

【问题讨论】:

  • “转储失败的函数代码”是什么意思?这不是 __func__(或 GCCs __FUNCTION__)所做的,给你函数名吗?你想要函数调用栈吗?
  • 我想输出函数本身的完整代码,或者至少在捕获错误之前执行的几行代码,而不仅仅是它的名称。
  • 所以你想实现一个可以自己调试的调试器?
  • 我想这是一种表达方式。
  • 您可以使用 GNU libc 函数 backtrace 来获取函数调用堆栈,并将其与 libdwarf 一起使用以从您的可执行文件中获取调试信息(如果使用调试信息构建当然)。

标签: c++ error-handling gnu output m4


【解决方案1】:

根本不要更改您的代码。使用__LINE____FUNC__ 并后处理错误输出。也就是说,以my-prog > $(tty) 2>&1 | post-process 身份运行您的程序,其中post-process 可以访问您的代码库并可以生成所需的文本。您可能希望通过添加标记来稍微修改代码,以便后处理更容易找到函数名称和行号。

【讨论】:

    猜你喜欢
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    相关资源
    最近更新 更多