简洁明了:DIA(调试接口(interface)访问)和DBGHELP库之间的实际区别是什么?我知道DIA是基于COM的并且似乎非常强大(并且能够与托管和非托管进程一起使用),而DBGHELP似乎使用起来非常方便但提供的可能性较少。任何人都可以解释这两者的区别在哪里,以及一个可以做什么,而另一个不能做什么?我真的很难在互联网上找到一些完整的结论性信息:(抱歉,如果这看起来是一个乏味的问题,感谢您为我提供的任何答案!:)问候普尔诺克提斯 最佳答案 DIA具有一致的基于COM的接口(interface)。DbgHelp由一组标准C函数组
我正在使用dbghelp中的UnDecorateSymbolNameW来取消修饰Microsoft符号名称。当使用UNDNAME_COMPLETE取消修饰时,符号名称有时会包含某些编译器附加的信息,据我所知。例如,一个vftable符号有时可以有一个大括号block,其中包含一个for关键字,后跟一个类/接口(interface)名称,例如SomeClass::'vftable'{for'Foo::Bar'}谁能告诉我名称的"{for'Foo::Bar'}"部分是什么意思?此外,是否有人知道有关此的一些文档,所以我可以阅读,因为我找不到任何内容。非常感谢!
我想打印函数名(导入的、导出的、普通/本地函数)而不是变量名等等。SymEnumSymbolsEx枚举所有符号,但我只想要函数。里面也找不到怎么区分函数和变量callback功能。有没有办法只枚举函数? 最佳答案 SYMBOL_INFO传递给您的回调有Flags,并且函数有SYMFLAG_FUNCTION 关于c++-使用Dbghelp.h的函数列表,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q
一年多以前,我已经使用WinDbg和DebugDiag来查找我们在Java中使用的JNInativeDLL中的内存泄漏。现在我正在寻找线程句柄泄漏。我使用ProcessExplorer创建了一个内存转储,并尝试在DebugDiag中对其进行分析,但我得到的只是脚本错误:我也尝试过WinDbg,但它无法再附加到进程。我总是收到错误消息“dbghelp.dll的版本与调试器不匹配”:(“UnbekannterFehler”的意思是“未知错误”)我卸载了DebugDiag和WindowsSDK,然后下载了最新版本并安装了WindowsSDK8和DebugDiag1.2(x86)。问题保持不变
我想以与windbg的dt命令相同的方式转储结构的字段和偏移量。例如,我想转储Microsoft公共(public)符号中的_PEB结构(因为windbg的DT命令有效)。从MSDN文档中我了解到SymFromName函数应该能够执行此操作,下面是我尝试过的代码,该代码在SymFromName上失败并出现LastError126(找不到指定的模块)。从注册的回调中,我得到以下输出:CBA_SET_OPTIONSCBA_SET_OPTIONSCBA_SET_OPTIONSCBA_EVENT:code0descDBGHELP:SymbolSearchPath:symsrv*symsrv.d
我正在努力通过Minidump(DbgHelp.h)获取句柄信息。我正在从映射文件流中获取MINIDUMP_HANDLE_DESCRIPTOR_2列表。然后,我通过使用ObjectInfoRva字段为每个描述符获取一个MINIDUMP_HANDLE_OBJECT_INFORMATION。但是我无法理解这个MINIDUMP_HANDLE_OBJECT_INFORMATION结构给我提供了什么信息,我在网上找不到任何例子来从MINIDUMP_HANDLE_OBJECT_INFORMATION中提取有意义的信息,并且文档不是很有用。如何使用MINIDUMP_HANDLE_OBJECT_INF
我正在尝试使用windbg分析故障转储,但根据加载的符号,我得到了不稳定的故障转储。我的简单理解是,符号只是帮助指向堆栈所指的内容,而堆栈本身并没有改变。这显然是错误的,但现在我不知道我到底在看什么。这是加载了所有符号的调用堆栈:0:000>kn#ChildEBPRetAddr000012e1207d61f60fntdll!ZwGetContextThread+0x12010012e130000f0005ntdll!RtlFreeHeap+0x711WARNING:FrameIPnotinanyknownmodule.Followingframesmaybewrong.020012e1
我有一个使用VisualStudio2010构建的混合C#/托管C++/非托管C++的工具。代码实际上分布在一个.exe(我将其称为mybinary.exe)和一个.dll(mylib.dll。)我已经在项目上为dll和exe设置了build设置,以便在发布构建中生成PDB文件。我已经确保PDB文件都在exe和pdb所在的同一目录中。但是当我调试这个程序时我仍然看不到函数的名称;我只看到地址。这是我在VerySleepy的第一个屏幕中选择程序时在底部的小状态栏中得到的相关摘录:DBGHELP:mybinary.vshost-publicsymbolsC:\Users\(me)\AppD
我使用JochenKalmbach'sStackWalkerclassfromCodeProject,在我的DLL中发生异常时生成堆栈跟踪。依赖于DbgHelp.dllDbgHelp.dll是否内置于WindowsVista、WS2008、Windows7?我知道TheDebuggingToolsforWindows来自Microsoft,我知道DbgHelp.dll包含在该包中。但我还在我的机器上的%windir%\system32中找到了DbgHelp.dll。如果它没有默认安装,我有没有办法用我的DLL的调试版本重新分发它? 最佳答案
我有一大堆小型转储,这些小型转储是在应用程序运行期间通过MiniDumpWriteDump记录的。小型转储是在操作系统版本与我的开发机器不同的机器上创建的。现在我正在尝试编写一个程序,使用dbghelp.dll从小型转储中提取堆栈跟踪。我正在遍历MINIDUMP_MODULE_LIST并调用SymLoadModule64,但这无法从公共(public)符号服务器下载pdb(kernel32等)。如果我将“C:\Windows\System32”添加到符号路径,它会找到dll并下载符号,但当然它们与小型转储中的dll不匹配,因此结果无用。那么我该如何告诉dbghelp.dll下载并使用正