问题标签 [dia-sdk]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
72 浏览

multithreading - 关于线程安全的 DbgHelp vs DbgEng vs DIA SDK

所有这些 API(DbgHelp、DbgEng、DIA SDK)都可用于从函数指针中恢复函数名称/源文件位置,因此可用于解密堆栈跟踪。

但是,每个 DbgHelp 函数都有以下注释:

所有 DbgHelp 函数,例如这个函数,都是单线程的。因此,从多个线程调用此函数可能会导致意外行为或内存损坏。为避免这种情况,您必须将来自多个线程的所有并发调用同步到该函数。

至于 DbgEng,没有这样的声明,但是它似乎是基于 DbgHelp,所以不能是线程安全的:即使 DbgEng 保护对 DbgHelp 的每次调用,也可能不是来自 DbgEng 的对 DbgHelp 的调用,而是直接来自用户的代码。

恐怕 DIA SDK 也是使用 DbgHelp 实现的。

那么是否有任何健壮的符号 API 可用于为多线程应用程序设计的库中?