C++ 让错误输出包括最后几行代码

C++ 让错误输出包括最后几行代码,c++,error-handling,gnu,output,m4,C++,Error Handling,Gnu,Output,M4,是否可能,如果可能,您将如何使错误输出包括最后几行代码?我知道GNU g++支持\uuuu LINE\uuuu和\uuu FUNC\uuuu,但它们只以int形式给出行号,以字符串形式给出函数名-我想转储失败的函数的代码或至少是程序执行的最后几个命令 我在想也许可以编写一个m4脚本,通过代码库进行解析,并注入它们所放入的函数的字符串结构(当然不包括它们自己) 还有其他/更好的想法吗?根本不要更改代码。使用\uuuu LINE\uuuu和\uuu FUNC\uuuu并对错误输出进行后期处理。也就是

是否可能,如果可能,您将如何使错误输出包括最后几行代码?我知道GNU g++支持
\uuuu LINE\uuuu
\uuu FUNC\uuuu
,但它们只以int形式给出行号,以字符串形式给出函数名-我想转储失败的函数的代码或至少是程序执行的最后几个命令

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


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

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

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

什么是“转储失败的函数的代码”?这不是
\uuuuu func\uuuu
(或GCCs
\uuuu FUNCTION\uuuu
)所做的吗,您可以得到函数名吗?您想要函数调用堆栈吗?我想要输出函数本身的完整代码,或者至少在捕获错误之前执行几行代码,不仅仅是它的名字。那么你想实现一个能够自我调试的调试器吗?我想这是一种说法。你可以使用GNU libc函数来获取函数调用堆栈,并将其与一起使用,从可执行文件中获取调试信息(当然,如果是用调试信息构建的)。这是什么意思“转储失败的函数的代码”?这不是你想得到函数名吗?你想得到函数调用堆栈吗?我想输出函数本身的完整代码,或者在捕获错误之前执行的至少几行代码,而不仅仅是它的名称。所以你想实现一个可以调试自身的调试器?我想这是一种说法。你可能可以使用GNU libc function获取函数调用堆栈,并将其与一起使用,以从可执行文件中获取调试信息(当然,如果是使用调试信息构建的)。