问题标签 [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 回答
261 浏览

debugging - 如何让 DIA 释放对 pdb 文件的锁定?

如何让 DIA 释放对 pdb 文件的锁定?

我加载了一个 pdb 并创建了一个会话,如下所示,一切正常,我可以使用会话从 pdb 获取数据。

当我完成 pdb 后,我释放会话和 DiaSource,但 DIA 仍然锁定 pdb 文件,我无法在资源管理器中删除 pdb 文件,直到我的应用程序退出。如何告诉 DIA 释放对 pdb 文件的锁定?

非常感谢。

斯图尔特。

0 投票
2 回答
1873 浏览

c# - 使用 dia-sdk 从 microsoft pdb 文件加载数据

嗨,我正在尝试从 pdb 文件中读取数据

我已经按照如何使用 C# 中的 MS DIA SDK 中的步骤进行操作?并生成程序集

问题是:在 MS pdb 文件上调用 dataSource.loadDataFromPdb 时会引发 ComException(HRESULT: 0x806D000C)

我试过使用 dumpbin.exe /headers 但它以“未知格式”失败

在自生成的 pdb 上使用 .loadDataFromPdb 和 dumpbin 可以正常工作

是否有另一种方法可以打开 MS pdb 文件,并专门提取 GUID

0 投票
2 回答
222 浏览

windows - DIA SDK如何获取FuncDebugStart/FuncDebugEnd的父函数?

并声明调用将返回封闭函数的符号的文档。我将其解释为我将得到一个who方法返回。但是,当我这样做时,它会返回我而不是函数。所以文档看起来是错误的,但更糟糕的是我不确定如何将and绑定到包含.SymTagFuncDebugStartSymTagFuncDebugEndIDiaSymbol::get_lexicalParentIDiaSymbolget_symTagSymTagFunctionSymTagCompilandSymTagFuncDebugStartSymTagFuncDebugEndSymTagFunction

有人知道吗?一些转储表明,SymTagFuncDebugStart并且在通过 枚举符号时SymTagFuncDebugEnd总是紧跟在相应的后面。或者换一种说法,如果函数返回,它将分别返回 func 调试开始和 func 调试结束。SymTagFunctionIEnumSymbolsIDiaSymbol::get_symIndexIdnn+1n+2

但我不能确定这总是正确的,这似乎不可靠且不可靠。

有没有人对正确的方法有任何建议?

0 投票
1 回答
541 浏览

visual-studio - Why does IDiaDataSource::loadDataForExe fail with E_PDB_NOT_FOUND from IDE but not from outside?

I'm getting started with the DIA SDK and have the following simple code:

If I start this from the Visual Studio IDE, it assert fails with E_PDB_NOT_FOUND, even if I start it without debugging. But if I start the very same program outside the IDE it works fine and returns S_OK. First I thought it's a working directory issue, so I put printf at the beginning to see if that's the problem, but it isn't the problem. The working directory is the same and PDB is there.

Does Visual Studio do something that affect the DIA SDK's behavior? I don't see anything in the documentation.

0 投票
0 回答
65 浏览

pdb-files - 为什么 IdiaEnumSymbolsByAddr::Next 崩溃?

我想按地址枚举符号,但是当我调用它时,IDiaEnumSymbolsByAddr::Next似乎崩溃了。

该文档没有说明任何额外内容。重现的最少代码:

这是 DIA SDK 中的错误吗?或者也许我不应该以这种方式使用界面?

0 投票
1 回答
922 浏览

c++ - 使用 getSymbolsByAddr 遍历 DIA SDK 中的符号

目标:我正在尝试列出 pdb 文件中包含的所有函数的地址。

当前方法:我找到了 DIA SDK,我正在修改 dia2dump 示例:https ://msdn.microsoft.com/en-us/library/hd8h6f46.aspx

我添加了一个新功能:

但是每次我运行它(在一个有效的 pdb 文件上),我都会得到这个异常:

所以,不知何故,某处存在 NULL 尊重。当我使用调试器运行时,我可以验证它pEnumSymbolsByAddr不是 NULL 并且传递给的指针pEnumSymbolsByAddr->Next不是 NULL。

我搜索了 SO,发现我并不孤单:为什么 IDiaEnumSymbolsByAddr::Next 崩溃?

我无法让调试器进入 msdia140.dll,所以我不知道到底出了什么问题。我还没有找到任何成功使用该pEnumSymbolsByAddr->Next功能的人。

0 投票
1 回答
233 浏览

c++ - 是否可以使用 IDiaDataSource::LoadDataFromPdb 从符号存储中读取 pdb?

我正在尝试使用IDiaDataSource::LoadDataFromPdb调试接口访问 windows 库 (DIA) 从本地符号存储中读取符号文件 (*.pdb),但我找不到设置上述函数用于搜索 *.pdbs 的路径的东西。是否可以LoadDataForPdb从本地符号存储中读取符号文件?

本地符号存储是使用SymStore.exe带有以下命令行参数的工具创建的:

symstore.exe add /f *.pdb /s .\SymbolStore /t "X"

本地符号存储包含集中位置的所有 pdb。

0 投票
1 回答
219 浏览

c# - Get raw decodated name of IDiaSymbol

I'm trying to improve SymbolSort library, which reads PDB files with DIA SDK. I need to match the symbols read from object files with the symbols read from PDB.

The question is: given an IDiaSymbol variable, how can I obtain its real name? I'm not interesting in the undecorated or human-readable name, I need the mangled name, exactly as it appears in the object file, exactly as linker sees it.


The undecorated name can be easily obtained via IDiaSymbol::get_undecoratedName (ref). For decorated name, I use the following code:

It was found empirically that this hack seems to work well in most cases (for no reason). But sometimes it gives some trash as result, e.g.:

0 投票
0 回答
142 浏览

c# - DIA SDK 抛出 NotImplementedException

我正在尝试使用 C# 中的 DIA SDK 检查 .pdb,但我无法使用以下代码获取用户定义的类型:

如果我从我的 C# 项目中引用 dia2.tlb 或 dia2.dll,我会得到不同的结果。

如果我引用 dia2.tlb,则函数调用成功完成,但没有返回任何符号。如果我也传递SymTagEnum.SymTagPublicSymbol给,这也是一样的findChildren

如果我引用 dia2.dll,该函数将NotImplementedException改为抛出 a。在这种情况下,传递SymTagPublicSymbolfindChildren确实会返回符号。

有没有人遇到过这个?我认为引用 .dll 是正确的,但我不知道为什么会被NotImplementedException抛出。

IDL/DLL

我在VS 命令提示符中创建dia2.tlb并使用命令:dia2.dll

非常感谢。

0 投票
0 回答
45 浏览

c# - 我可以使用 DIA SDK 获得类的对齐值吗?

我正在用 c# 制作应用程序,它可以列出所有类/结构及其成员,例如使用 DIA SDK 从 pdb 中的成员,但我不知道如何获取对齐值。我试图在微软文档https://github.com/MicrosoftDocs/visualstudio-docs/tree/master/docs/debugger/debug-interface-access中搜索它,但我找不到任何返回类/结构的属性结盟。我可以使用 DIA SDK 以某种方式获得它,还是需要使用成员的偏移量手动计算它?