VS2010远程调试步骤

日期:2014-07-31点击次数:9956

       在某些情况下我们需要进行远程调试(比如该程序运行需要全屏,或者程序在客户的机器上crash崩溃), 这时候可以使用远程调试功能。虽然现实情况下,很少有人使用这项功能,取而代之的是使用日志或者使用TRACE功能查找Bug,但掌握远程调试功能能追踪到程序运行的轨迹,洞若观火,明察秋毫,是解决一些很难再现Bug的利器,值得一学。
        visual studio的远程调试由服务端和客户端组成,和WinDBG类似。被调试的机器是服务端(server),我们做调试的机器是客户端(client)。 
一、 准备调试环境:
调试机器,操作系统win7, IP 169.254.180.38;
远程被调试机器,vmware虚拟操作系统winxp ,IP 192.168.186.133。
为了演示远程调试步骤,使用a写了个测试Demo:
TestDll.dll导出了一个加法函数int add(int a, int b);TestDemo调用了TestDll.dll导出函数,用于计算0 + 1 + 2 + 3 + 4……,一秒钟打印一次累加结果。
TestDll工程源码:
TestDll.h:

1
2 int add(int a, int b);

TestDll.cpp:

1 // TestDll.cpp : Defines the exported functions for the DLL application.
2 //

4 #include "stdafx.h"


7 int add(int a, int b)
8 {
9  int c = a + b;
10
11 return c;
12 }
 

TestDemo工程源码:
TestDemo.cpp:

1 // TestDemo.cpp : Defines the entry point for the console application.
2 //

4 #include "stdafx.h"
5 #include <windows.h>
6 #include "TestDll.h"

8 #pragma comment(lib,"TestDll.lib")

10 int _tmain(int argc, _TCHAR* argv[])
11 {
12 unsigned long sum =0;
13 unsigned num = 0;
14
15 while(1)
16 {
17 sum = add(sum, num);
18
19 Sleep(1000);
20
21 printf("num = %u, sum = %u\n", num, sum);
22 num ++;
23 }
24
25 return 0;
26 }

二、 要进行远程调试,调试服务端设置过程:
1. 远程被调试机器必须包含被调试程序的调试符号,否则就无法做到符号与源码的对应关系。
将VS2010生成的TestDemo.exe,TestDemo.pdb,TestDll.dll,TestDll.pdb拷贝到虚拟操作系统winxp任意目录下,如下图所示。其中文件扩展名为pdb的文件,是对应exe或者dll的调试符号文件。在虚拟机下运行TestDemo.exe。
 
2. 需要将VS2010远程调试组件拷贝到虚拟机下,并启动监听。
需要将VS2010安装目录Microsoft Visual Studio 10.0\Common7\IDE\Remote Debugger下x86目录拷贝到虚拟机下。
 
双击msvsmon.exe,启动远程调试服务端,然后进行选项设置。
 
选择Tools菜单下的Options,弹出Options对话框。
 
选择Authentication mode下的No Authentication(native only),并勾选Allow any user to debug。
 
点击“OK”按钮完成设置,此时远程调试服务端已经就绪。

三、 调试客服端端设置过程:
       如果想通过win7下的VS2010源码调试在虚拟机下正在运行的TestDemo进程,VS2010调试客户端需要远程连接在虚拟机下开启的远程监听程序,并附加虚拟机下TestDemo进程。
具体做法如下:
首先打开TestDemo项目,如下图:
 
选择VS2010 Tools菜单下的Attach to Process…


弹出Attach to Process对话框:
 
选择Transport:下拉框中的Remote(Native only with no authentication),默认是本地调试;Qualifier:组合框中填入被调试机器的IP地址。比如我调试的虚拟机IP为 192.168.186.133。然后点击Refresh按钮,刷新被调试机器的进程列表。
 
在进程列表中选中我们要调试的远端进程。然后点击“Attach”按钮附加被调试进程。我调试的远端进程是TestDemo.exe进程。
此时,我们可以在VS2010项目中的源码任意下断点,调试在虚拟机下运行的TestDemo进程。譬如我在TestDll工程TestDll.cpp源文件第9行按F9设置一断点,下图显示命中断点时的情景,在断点命中时,我们可以查看此时各个变量的值。
 
       至此,有关VS2010远程调试步骤介绍完了,要结束调试,按shift + F5结束调试就行,不会影响到远程的被调试进程。有关Windows下远程调试的方法,其实还有一种,就是使用WinDbg进行远程调试,该调试器能调试windows内核和驱动程序,能通过转储文件(进程崩溃时生成的core文件)定位到代码行,也能进行远程调试,这一部分内容,留待以后详述。


 

软件部   向国春

姓名:
性别:
电话:
E-mail
问题:
问题描述: