问题标签 [dbghelp]
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.
visual-c++ - 如何在编译时检测 DbgHelp 的版本?
DbgHelp的参考手册很好地列出了所有版本以及它们引入的更改。如何在编译时检测版本?
windows - 调试 (Win):DIA 与 DBGHELP
简明扼要:
DIA(调试接口访问)和 DBGHELP 库之间的实际区别是什么?我知道 DIA 是基于 COM 的,并且似乎非常强大(并且能够与托管和非托管进程一起使用),而 DBGHELP 似乎使用起来非常方便,但提供的可能性较小。
任何人都可以解释这两者在哪里有它们的区别,以及可以用一个做什么而不用另一个做什么?我真的很难在互联网上找到一些完整的结论性信息:(
抱歉,如果这似乎是一个无聊的问题,感谢您为我提供的任何答案!:)
问候 PuerNoctis
dbghelp - 如何并排存储调试符号和二进制文件
最近我注意到,当使用 SymChk 从 Microsoft 符号存储下载符号时,它会带来 DLL 和 PDB。我想知道是否可以使用标准的微软工具(如 SymChk/SymStore)来存储二进制文件和符号?
windows - Windows PDB 文件包含相同地址的多个符号?
可能重复:
为什么两个函数打印相同的地址?
我正在为处理它们的应用程序使用 PDB 符号文件(通过 DbgHelp API)。我遇到了一个奇怪的问题,即 PDB 文件将包含同一地址的多个不同公共符号条目!
例如,在 Windows 7 (x64) 上使用 kernel32.dll (wow64) 的最新 Microsoft PDB 文件,我们可以转储以下信息并查看相同地址 0x10b1a6e 的 31 个不同条目:
上面的示例是包含重复的许多地址之一。通常在任何地址都有一个符号条目。对同一个地址 AFAIK 有多个符号条目根本没有意义!
任何人都可以启发我:
为什么会这样?
这些重复的条目可以解析到唯一的位置吗?
谢谢。
c++ - .pdb中的函数地址与.exe不同,为什么?
我通过 SymEnumSymbols 从 .pdb 文件中读取了主函数的地址,值为 0x0100116e0,
但是这个函数在VS2008的解密码中的地址是004116E0
然后我尝试通过将 2 个不同的地址传递给 SymGetSymFromAddr64 来验证结果,我得到了相同的函数符号,唯一的区别是 PIMAGEHLP_SYMBOL64 的地址成员,一个是 100116e0,另一个是 4116E0。我也试过用微软的 dbh.exe 验证一下,命令是
我的 main 函数的地址在 TestsymbolLookup.exe 中是唯一的,但为什么我得到 2 个不同的答案???
delphi - 如何在 EExternal 异常期间获取 EXCEPTION_POINTERS?
我如何获得EXCEPTION_POINTERS
,即两者:
PEXCEPTION_RECORD
和PCONTEXT
EExternal
异常期间的数据?
背景
当 Windows 抛出异常时,它会传递一个PEXCEPTION_POINTERS
; 指向异常信息的指针:
当Delphi向我抛出EExternal
异常时,它只包含一半的信息,PEXCEPTION_RECORD
唯一的:
在EExternal
异常期间,我如何同时获得两者?
示例用法
我正在尝试使用MiniDumpWriteDump
Delphi 的函数编写一个 Minidump。
该函数有几个可选参数:
在基本层面上,我可以省略三个可选参数:
它成功了。缺点是小型转储缺少异常信息。该信息(可选)使用第四个miniExceptionInfo参数传递:
这很好,除非我需要一种方法来在EXCEPTION_POINTERS
发生异常时获取 Windows 提供的信息。
该TExceptionPointers
结构包含两个成员:
我知道 Delphi 的EExternal
异常是所有“Windows”异常的基础,它包含所需的PExceptionRecord
:
但它不包含关联的ContextRecord
.
还PEXCEPTION_RECORD
不够好吗?
如果我尝试传递EXCEPTION_POINTERS
to MiniDumpWriteDump
,留下ContextRecord
零:
然后函数失败并出现错误0x8007021B
仅完成了 ReadProcessMemory 或 WriteProcessMemory 请求的一部分
怎么样SetUnhandledExceptionFilter
?
你为什么不直接使用
SetUnhandledExceptionFilter
并获得你需要的指针呢?
问题在于未过滤的异常处理程序仅在异常未过滤时才会启动。因为这是 Delphi,而且因为我处理了异常:
该应用程序不会,我也不希望它因 WER 故障而终止。
我如何EXCEPTION_POINTERS
在一个期间获得EExternal
?
注意:您可以忽略从背景开始的所有内容。它是不必要的填充物,旨在让我看起来更聪明。
先发制人的尖刻 Heffernan 评论:你应该停止使用 Delphi 5。
奖金阅读
- MSDN:崩溃转储分析(Windows)
(如何调用的详细示例
MiniDumpWriteDump
) - CodeProject:使用 Minidump 和 Visual Studio .NET 对应用程序进行事后调试 (一般性讨论概念、优点以及如何生成和使用 minidump)
- Stackoverflow:当我的进程崩溃时如何为它创建小型转储? (初步介绍迷你转储世界)
- Stackoverflow:可以防止单个应用程序的 Microsoft 错误报告吗? (在 Delphi 中设置未过滤的处理程序)
windows - 未修饰的 Microsoft 符号:SomeClass::`vftable'{for `Foo::Bar'}
我正在使用UnDecorateSymbolNameW
dbghelp 来取消装饰 Microsoft 符号名称。当用 取消装饰时UNDNAME_COMPLETE
,符号名称有时可以有,我理解的是,一些编译器附加了信息。例如,一个 vftable 符号有时可以有一个大括号块,其中包含一个for
关键字,后跟一个类/接口名称,例如
SomeClass::'vftable'{for 'Foo::Bar'}
谁能告诉我"{for 'Foo::Bar'}"
名字的一部分是什么意思?
此外,是否有人知道有关此的一些文档,所以我可以阅读,因为我找不到任何东西。
非常感谢!
debugging - 如何在 OlyDbg 中启用 Microsoft 符号服务器?
OlyDbg 第 2 版最近发布。它现在支持使用 Microsoft 符号服务器进行调试:
它通过 dbghelp.dll 支持 Microsoft 编译器。新功能是对符号服务器、使用 dbghelp 的堆栈遍历和过程参数名称的支持。
如何让 OlyDbg 使用 Microsoft 符号服务器?
你试过什么?
长答案:
- 我已将 OlyDbg 指向 DbgHelp.dll 下载符号后将包含符号的文件夹
- 我已经告诉 OlyDbg 可以访问 Microsoft 符号服务器
- 我告诉 OlyDbg 可以使用 DbgHelp.dll
- 我已尝试将 OlyDbg 2.0 随附的 DbgHelp.dll 版本(2008 年)更新为 Windows 8 SDK 随附的版本
我设置了一个系统环境变量:
/li>我已将OlyDbg 应搜索的“目录”
SRV*d:\Symbols*http://msdl.microsoft.com/download/symbols
添加为YouTube 视频
是什么让你认为它不起作用?
- a) 符号目录为空
- b) msdl.microsoft.com 没有互联网流量
c) OlyDbg 2.0 中没有符号出现
也可以看看
- 如何在 OllyDbg 中使用操作系统符号文件?(OlyDbg v1;知道的人因为脾气暴躁而拒绝回答)
- 如何在 OllyDbg 中使用 OS 符号 pdb 文件?(OlyDbg v1)
- YouTube: HowTo: 将 OllyDbg v2.1d 和 v2.1.0.4 与 MS 调试符号服务器一起使用(警告:静音)
winapi - Windows 损坏的小型转储
当我的程序崩溃时,它会从未处理的异常处理程序中创建一个小型转储。我遇到的问题是人们向我发送故障转储,但是当我尝试在 Visual Studio 2010 中打开它们时,它说它们已损坏(“转储文件的格式无效”)。我没有分发dbghelp.dll
我的程序,我需要吗?我假设如果是版本问题,Visual Studio 会让我知道并且不会输出上述消息。
我用来生成日志的代码是
debugging - 如何使用 DbgHelp 访问转储中的 PEB(进程环境块)
我找到了一个使用调试器引擎 API 在转储中获取 PEB的示例。这可以使用 DbgHelp 吗?拥有使用 DbgHelp 提取注释和异常信息的现有代码。如果可能的话,想从 PEB 获取一些信息。