sea*_*n e 6 c++ windows minidump windbg visual-studio
我有一个用符号构建的本机发行版dll.有一个修改dll的post构建步骤.post构建步骤会进行一些压缩,并可能附加一些数据.pdb文件仍然有效,但是在构建后步骤之后,WinDbg和Visual Studio 2008都不会加载dll的符号.我们需要修改pdb文件或dll中的哪些位以使WinDbg或Visual Studio在加载引用我们的版本dll的转储时加载符号?
文件大小是否重要?校验和或哈希?时间戳?
修改转储?还是修改pdb?在发货前修改dll?
(我们知道pdb是有效的,因为我们可以使用它来手动获取引用已发布的dll的转储调用堆栈中的地址的符号名称.这只是*ss中的一个完全痛苦,对于调用堆栈中的每个地址都可以手动执行所有线程.)
sea*_*n e 12
这篇文章让我想到了chkmatch.在已处理的dll上,chkmatch显示以下信息:
Executable: TimeDateStamp: 4a086937 Debug info: 2 ( CodeView ) TimeStamp: 4a086937 Characteristics: 0 MajorVer: 0 MinorVer: 0 Size: 123 RVA: 00380460 FileOffset: 00380460 CodeView signature: sUar Debug information file: Format: PDB 7.00 Result: unmatched (reason: incompatible debug information formats)
使用与预处理的dll相同的pdb,它会报告:
Executable: TimeDateStamp: 4a086937 Debug info: 2 ( CodeView ) TimeStamp: 4a086937 Characteristics: 0 MajorVer: 0 MinorVer: 0 Size: 123 RVA: 00380460 FileOffset: 00380460 CodeView format: RSDS Signature: (my guid) Age: 19 PdbFile: (my path) Debug information file: Format: PDB 7.00 Signature: (my matching guid) Age: 19
我打开了两个版本的dll并转到00380460.在原始版本中,我看到了pdb的名称,但是在后处理版本中,该偏移处没有pdb信息.我搜索了pdb路径并找到了完全相同的块 - 只是在不同的偏移处.然后我在原始dll中搜索字节"38 00 60 04".查看处理后的dll中的相同偏移量,我发现了相同的字节.所以我调整了RVA和偏移量(通过匹配字节来定位).答对了!现在chkmatch报告处理后的dll与原始dll完全相同(除了我更改的RVA和FileOffset).
编辑:确认,现在Visual Studio加载引用已处理的dll的转储的符号.
| 归档时间: |
|
| 查看次数: |
3766 次 |
| 最近记录: |