【问题标题】:Debugging (Win): DIA versus DBGHELP调试 (Win):DIA 与 DBGHELP
【发布时间】:2012-06-11 18:27:26
【问题描述】:

简明扼要:

DIA(调试接口访问)和 DBGHELP 库之间的实际区别是什么?我知道 DIA 是基于 COM 的,并且似乎非常强大(并且能够与托管和非托管进程一起使用),而 DBGHELP 似乎使用起来非常方便,但提供的可能性较少。

谁能解释这两者的不同之处以及可以用一个做什么但不能用另一个做什么?我真的很难在互联网上找到一些完整的结论性信息:(

抱歉,这似乎是一个无聊的问题,感谢您为我提供的任何答案! :)

问候 普埃尔诺克蒂斯

【问题讨论】:

    标签: windows debugging dbghelp dia


    【解决方案1】:

    DIA 具有一致的基于 COM 的接口。 DbgHelp 由一组标准 C 函数组成。

    这是我写的关于 DIA 的两篇文章(带有 C++ 示例),展示了 DIA 的力量:

    1. Symbols File Locator
    2. How to Inspect the Content of a Program Database (PDB) File

    如果可能,请使用 DIA 而不是 DbgHelp,因为任何支持 COM 的程序都可以使用 DIA。

    【讨论】:

    • 感谢您的链接!有趣的是:几分钟前我已经看过您的文章;)另一个问题:DIA 是否可以用于调试非托管和托管应用程序?
    • 不客气!如前所述,DIA 基于 COM,这意味着非托管代码。您当然可以使用网桥从托管应用程序中使用 DIA。由于托管代码包含完整的源代码并且不使用 PDB 符号,因此我认为它不适合调试托管应用程序。
    • 哦,好吧。与此同时,我还发现了“CLR 调试 API”,它还提供 COM 接口来调试托管应用程序(围绕 ICorDebug 接口)。再次感谢您迄今为止的专业知识!现在我知道 DIA 和 DBGHELP 是如何关联的 :)
    【解决方案2】:

    这是同样的事情。 DbgHelp 是核心 api,它可以从 C 中使用。DIA 是基于它的 COM 对象模型,它使它更易于使用,并且可以从大多数任何语言访问。它是Debug Interface Access的首字母缩写,强调“Access”。它的 MSDN 文档starts here

    【讨论】:

    • 谢谢!有没有值得一提的“主要”缺点?
    • 您将首先遇到的任何问题视为主要缺点。我猜不出那会是什么。
    • 好吧,很公平,我认为这是有道理的 :)
    • “DIA 是一个基于它的 COM 对象模型,它使它更易于使用,并且可以从大多数任何语言中访问”——这是真的吗?因此,如果我从 C 中读取 pdb 文件,我不妨使用 DbgHelp?我使用 DIA 是因为我认为它更强大,但我宁愿不必使用 COM。
    • 我已经检查过了,结果恰恰相反,DbgHelp 实际上是 DIA 的包装器。见msdn.microsoft.com/en-us/magazine/cc301692.aspx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多