GNU backtrace_symbols()和dladdr()线程安全吗?

时间:2011-07-22 08:00:03

标签: c multithreading gnu

我正在编写一个C ++异常类,它必须在throw站点提供有限的回溯。由于我的应用程序将是多线程的,因此可能会同时抛出异常。我在互联网上搜索了这个线程安全问题,但没有找到。

backtrace()返回C字符串数组。应用程序不得释放这些C字符串。由于它在运行时获取其信息并合成这些字符串,因此我担心它不是线程安全的。

dladdr()返回struct Dl_info,其中包含两个C字符串。也不能被应用程序释放。

哦,我想我应该阅读源代码。

1 个答案:

答案 0 :(得分:1)

来自the manual

  

回溯是线程中当前处于活动状态的函数调用列表。检查程序回溯的常用方法是使用外部调试器,例如gdb。但是,有时从程序中以编程方式获取回溯是有用的,例如,用于记录或诊断。

     

头文件execinfo.h声明了三个获取和操作当前线程的回溯的函数。

看起来他们正在使用thread-local storage

dladdr返回属于加载的目标文件的不可修改的字符串。这是线程安全的,因为它是只读的,并且该对象在dlclose之前可用。