VS~单步调试DLL利用VS2005拓展dump文件调试。

by admin on 2018年9月21日

奇迹我们打第三着下载DLL库之后,在动VS进行调剂时还是挺烦的,现在本身总一下,在出了过程被调试DLL的主意,希望对各位在支付被生出辅助。

序言:利用drwtsn32或NTSD进行次崩溃处理,都可生成可用于调试之dmp格式文件。使用VS2005开辟生成的DMP文件,能非常便利的检索出BUG所在位置。本文将讨论以下内容:

1 VS下充斥插件.Net Refector

1、  程序编译选项

2
引用你的DLL,或者应用Nuget安装你的老三方DLL,注意要求而的DLL不要闹PDB文件,因为反射调试时会变动新的

2、  利用VS2005 分析dump文件

3 开启Refector的调试dll功能

3、  常见问题讨论

图片 1

同样、       程序编译选项

4 选择用调剂之DLL,将它本的PDB文件去

PDB files
contains all debug information like type definition and function
prototype. When
application crashes, we need the PDB files to analyze the root cause, so
make sure these PDB files will be created when building it. You must
do the following setting:

图片 2

C/C++/General/Debug
Information Format=Program Database (/Zi).

5 这时你的DLL自动添加到过程被

图片 3

图片 4

希冀1.1 调试信息格式

6 现若就可拓展单步的DLL调试了

Linker/Debugging/Generate Program Database
File=”Name and location of your PDB files”

图片 5

图片 6

希冀1.2 PDB文件输出路径

PDB文件路径最好设置以和一个文本夹着,这样好dmp文件调试时调用。

调节时,所有的PDB文件与来自文件要从严匹配(the PDB
files should be the one generated by build the source
code),并蕴藏于一个康宁之职务。当客户告知了一个荒谬时,你要这些文件来助以便定位错误为源代码中连缓解问题。

二、       VS2005 分析dump文件

In this
simple application, there is an unhandled Access Violation Reading
exception, because GetNameFromDatabase returns a NULL pointer, and this
pointer is passed into IsPrefix and then it’s used directly without NULL
pointer checking.

图片 7

祈求1.3 演示代码

 

动用Release模式编译该测试程序,在客户机上运行该次,将依据NTSD设置生成相对应之DMP格式文件。

好用Visual
Studio.Net、NTSD或是其他的调试工具对DMP格式文件进行辨析。

 

l         Start
Visual Studio.Net

Click File/Open
Solution and make
sure the files of type is *.dmp then click Open.

图片 8

图1.3 Open
Dump File (GUI)

 

l         Set Symbol
Path

Click
Tools/Options, Debugging/Symbols,增加PDB文件路径。若调试之顺序要微软基础库的PDB信息,可以增加一个路线为:

http://msdl.microsoft.com/download/symbols

当界面下方Cache
Symbol From symbol…选择本地存储这些Symbols的门路。

图片 9

图1.4 Symbol
Path

设DMP文件并未放入本身PDB文件所在目录,也得以于这边增加一个本土目录。点OK后,VS2005将起网中下载所待的Symbols,需要等待一段时间。如果是一再调剂和一个顺序不当所特别成的DMP文件,可以于对话框中选取“Search the
above locations only when symbols are loaded manually”。从而得以省去网络带来富。

 

l         Set Source code
path

Open Solution Property
Pages and set the source code path.

图片 10

祈求1.5 属性菜单

图片 11

图1.6 Debug Source
Files

 

l         Start to
Debug the Dump File

Click the Debug menu, it
will ask you to save as a solution, save it. Then it will go to the line
which caused the crash of your application.

图片 12

希冀1.7 调试窗口,定位到源代码

 

其三、       常见问题讨论

1、  Dump文件在何?

Dump文件不用非要是在你编译出来的职,你一点一滴可以建立一个新的文书夹来放大她。但倘若未是存放于编译出来的职,需要用编译生成的PDB文件拷贝到Dump文件目录,或是利用VS2005开拓Dump文件后,设置PDB文件路径。参照图1.4。

 

2、  如何恢复就底实地?

或者而若咨询,怎么可能,这个dump文件可是用户发放我之,我莫容许失掉用户家里调试吧?这个恢复现场可以是依的无要交那尊机器上,而是要拿来dump文件对应的二进制文件将到。

可是还原现场用具有的二进制文件都设相应,你势必要产生导致用户崩溃的那些Exe和DLL。既然是您发表之次第,Exe文件当然你晤面发。所以这边只有考虑DLL就实行了。

Dump文件中记录了有DLL文件之版本号和岁月穿,所以若一定好同过某种途径以到其。如果您可知于用户那里以到绝好,如果非便宜,用户不容许为此底凡我们平常不常用的操作系统,所以寻找个来对承诺系的机器一般都见面来。但是切记不仅是文件名称要同,还要按版本与岁月戳,如果差一样没有艺术用。

只要客户因此了某特殊的补丁怎么惩罚?

实质上是问题吗蛮好解决,只要她不阻拦阅读堆栈,就无须管她,调试Dump和运行程序不一样,缺少一两个DLL没有任何问题。

 

3、  如果确实要怎么收拾?

符文件现在首要是依PDB文件。

如无标记文件,那么调试的上恐怕造成堆栈错误。

倘你丢了这通告版中你编译出来的那些exe和DLL的PDB,那么是损失是人命关天的,重新编译出来的版本是匪可知使的。

自家要好之DLL都产生了,可是亏的是网的DLL的呼应PDB文件怎么处置?图1.4遭就介绍了法。微软以它们的记号数据库及为我们提供了颇具的PDB文件,还有部分未重点DLL。设置好后先后用机关下充斥需要之PDB及DLL文件。

 

4、  将到需要的文件了,这些文件应当放在哪里?

号数据库被的文件未用动,把其余的exe和DLL、PDB文件在dump文件目录里便执行了。

 

5、  我之所以之凡VS2005,明明有源代码,为什么来得不了?

斯是dump调试的极度讨厌问题,代码可能早已转了了,即使你于SVN拿到及时之版本,时间戳也是蹭的,VS2005便是不深受您出示代码。其实如果在

Tools/Options,Debugging/General中去掉

Require source files to
exactly match the original version的复选就推行了。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图