vs的几种调试方法

作者:[email protected] (转载需保留)

========================================================================================

进入调试的方法

1. F5,项目右键菜单->调试->启用新实例
点击项目右键菜单->属性->配置属性->调试,可以设置调试的相关参数:
1、命令:默认是$(TargetPath),就是启动输出的可执行程序
2、命令参数:启动被调试程序时使用的命令行参数。
3、工作目录:启动被调试程序时使用的当前文件夹。影响GetCurrentDir,以及加载dll。
4、附加:否-启动新进程 是-附加到已经存在的进程中
其它参数不常用,有兴趣请百度之。

2. 打开 工具 –> 附加到进程
3. 打开 任务管理器 –> 右键进程,选择调试
4. DebugBreak附加:使用 DebugBreak()方式。
这种方法适用于源代码量比较大,不容易定位问题的情况下。在程序执行到DebugBreak()时,会弹出一个提示框。然后点击取消会弹出选择调试器

的对话框,而之后就可以按照常规的调试(单步、单函数等)进行调试了。这种方法一般能够快速的定位问题!
5. Windows错误后附加:内存访问、堆栈等系统错误在正确配置的机器和正确配置的程序错误模式下会弹出对话框,对话框中点取消后出弹出弹出选择

调试器的对话框。
6. 断言附加:断言后,点击重试,会弹出选择调试器的对话框,先择调试器后即可调试。
7. 自己程序内弹出MessageBox后附加:在想要附加调试的代码之前先弹出任意消息对话框,并且设置断点,然后附加。(其实类似4)。

=======================================================================================

开启远程调试。

打开vs2005的安装目录,可以发现有个目录为 Remote Debugger。此文件夹可以单独的copy出来进行远程调试。
或者在开始菜单中启动“\程序\Microsoft Visual Studio 2005\Visual Studio Tools\Visual Studio 2005 Remote Debugger””

无身份验证模式
1、在调试目标机器中,打开远程调试器程序(msvsmon.exe),win7下要使用管理员权限。
2、工具->选项->无身份验证->允许任何用户进行调试。
3、确定。如果弹出防火墙阻止调试什么的,尝试选择”取消xxxx的限制”,每个选项都试一下,直至能调试。或者关闭防火墙。

有身份验证模式
未使用过,不解释。

也可使用 Visual Studio 2005 Remote Debugger配置向导进行配置(未使用过,不解释)。

=======================================================================================

远程调试。

1、在vs里附加远程调试器:

#vs菜单:工具->附加到进程

#在附加对话框中选择“远程(无身份验证时只限本机)”

#在限定符中填写开启远程调试器的机器的ip和端口。例:192.168.0.100:4015, www.kuai8.com:4015

#回车键后应该可以看到“可用进程”,找到要调试的进程,点击“附加”或双击之,就可以附加上。

#然后其它调试步骤同本机调试。
2、也可以使用远程调试直接启动目标机器上的程序:

#项目右键菜单->属性->配置属性->调试

#更改“要启动的调试器”为“远程windows服务器”。

#远程命令:填写远程调试目标机器上要调试启动的程序的全路径。命令参数和工作目录类似本地调试,不多说明。

#远程服务器名称:远程调试目标机器的ip和调试器端口。例:192.168.0.100:4015, www.kuai8.com:4015

#连接:根据远程调试器开启的调试类型,选择“带windows身份验证的远程访问”或“不带windows身份验证的远程访问(仅限本机)”。

#然后F5,项目右键菜单->调试->启用新实例 进入调试。

=======================================================================================

dump文件调试。

1、使用vs打开dump文件,先看看模块中,想调试代码的模块的位置(比如:生成dump时,主程序位置是C:\test\abc.exe)
2、在对应位置上放上对应版本的应用程序(如:C:\test\abc.exe)和pdb信息(也可手动加载其它地方的pdb)。
3、F5执行之,不过能看到的内容多少跟dump文件里的内容多少有关。
4、执行过程中需要参看源码的时候,如果pdb里记录的源码目录和当前机器不一样,会弹出选择框提示选择。
推荐使用“HardLinkShellExt”或junction添加目录连接点,或者win7上直接添加源码文件夹映射,将自己机器上的源码目录,映射到pdb里记录的位置,方便调试。

定位问题的方法

1.断点: 在使用vs2005的时候,可以在右下方堆栈输出器中选择”新增断点”。这里有两种形式的断点。
或者是使用F9添加断点,添加普通断点后可以给断点添加些特殊条件:
断点管理器或者代码编辑器中,使用断点右键菜单:
1、位置:调整断点在代码中的行数
2、条件:可设置一些表达式
比如:i==4
this==0x00123456
index > 7
3、命中次数:断点命中几次后才断下来调试。
4、筛选器和命中条件:有需求时自行使用,不解释。

2、基本调试窗口:局部变量、线程、调用堆栈、自动窗口、内存。(内急,不写了,有机会再说明)
3、其它:即时窗口、监视、寄存器等。。。

C++