gpt4 book ai didi

C++ 和调用栈——它可以用来获取行号吗?

转载 作者:太空狗 更新时间:2023-10-29 23:16:58 25 4
gpt4 key购买 nike

我不太记得 GCC 使用哪个库来实现堆栈展开,它用于 C++ 异常和调用跟踪,而且我知道 C++ 规范中没有定义任何方法,所以对此的任何答案都是特定于平台的。我正在使用 GCC 4.9.0。

知道哪里出了问题非常有用,尤其是在调试期间。因此,我经常会在扩展中使用扩展和传递某些内容的宏 __LINE____FILE__

我不太喜欢这样做,但它会告诉您函数是从哪里调用的(因为宏 __LINE____FILE__ 位于调用位置),这真的很方便!

与其使用一些基于构建条件定义的可怕宏,不如使用一些使用堆栈展开库的条件定义代码。

用的是什么库?编译时可以告诉编译器要记录多少信息?显然,对于发布版本,您只需要异常处理所需的内容。

如果不是,约定是什么? C++ 程序员如何获得 Python 和 Java 程序员认为理所当然的东西——冗长的堆栈跟踪。

我想一个回退但不是很优雅的解决方案是创建一个新的基础,我从中抛出异常并有一个重新抛出和附加行、文件和 __FUNCTION__ 的宏,但这是一个回退.

我对 GCC 使用什么库以及提供给 GCC 以控制它放入多少信息的选项很感兴趣,所以请分享你对这方面的任何知识!

最佳答案

如果您在 linux 下使用,这是另一个选项。

1) 设计你的信号处理程序,这样任何异常都将由你自己的信号处理程序处理,而不是像生成 coredump 文件那样的系统。

2) 在你的signal handler中,只要遇到异常,使用系统调用pstack生成trace信息。

like::system ("pstack yourpid >logfilename");

关于C++ 和调用栈——它可以用来获取行号吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21147301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com