[英]Are GNU backtrace_symbols() and dladdr() thread-safe?
我正在写一个 C++ 异常 class,它必须在抛出站点提供有限的回溯。 由于我的应用程序将是多线程的,因此可能会同时抛出异常。 我在 Internet 上搜索了这个线程安全问题,但没有找到。
backtrace()
返回 C 字符串数组。 应用程序不得释放这些 C 字符串。 由于它在运行时获取信息并组合这些字符串,我担心它不是线程安全的。
dladdr()
返回一个struct Dl_info
,其中包含两个 C 字符串。 也不能被应用程序释放。
哦,好吧,我想我应该只阅读源代码。
从手册
回溯是当前在线程中活动的 function 调用的列表。 检查程序回溯的常用方法是使用外部调试器,例如 gdb。 然而,有时以编程方式从程序中获取回溯是有用的,例如,为了记录或诊断的目的。
header 文件 execinfo.h 声明了三个函数,用于获取和操作当前线程的回溯。
看起来他们正在使用thread-local storage 。
dladdr
正在返回属于加载的 object 文件的不可修改的字符串。 这是线程安全的,因为它是只读的,并且 object 在dlclose
之前可用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.