我正在编写一个C ++异常类,它必须在throw站点提供有限的回溯。由于我的应用程序将是多线程的,因此可能会同时抛出异常。我在互联网上搜索了这个线程安全问题,但没有找到。
backtrace()
返回C字符串数组。应用程序不得释放这些C字符串。由于它在运行时获取其信息并合成这些字符串,因此我担心它不是线程安全的。
dladdr()
返回struct Dl_info
,其中包含两个C字符串。也不能被应用程序释放。
哦,我想我应该阅读源代码。
答案 0 :(得分:1)
回溯是线程中当前处于活动状态的函数调用列表。检查程序回溯的常用方法是使用外部调试器,例如gdb。但是,有时从程序中以编程方式获取回溯是有用的,例如,用于记录或诊断。
头文件execinfo.h声明了三个获取和操作当前线程的回溯的函数。
看起来他们正在使用thread-local storage。
dladdr
返回属于加载的目标文件的不可修改的字符串。这是线程安全的,因为它是只读的,并且该对象在dlclose
之前可用。