Visual Studio C++ 远程调试

Visual Studio 远程调试

  • 前言
    • 准备
    • Visual Stdio远程调试步骤
    • 基于TeamView NPV的外网远程调试

前言

在项目/产品开发过程中,BUG总是无处不在,几乎不可避免,我想没有人可以拍着胸脯说:本次上线百分百绝对无BUG。

如果BUG出现在项目开发周期内,则开发人员可以通过各种测试来发现定位BUG,并在自己的开发机(自己的台式机或笔记本,部署了开发环境)上调试跟踪、解决BUG,这是绝大部分开发人员都会经历且熟练于心的一种解决BUG的方式。

还有一种情形:BUG出现在项目/产品上线后,该项目/产品安装在世界各地的某个遥远的位置,而且只有该位置的项目/产品出现BUG,这就无法使用第一种解决BUG的方式了,有几个原因:
(1)如果BUG机的位置和开发人员的距离相距非常远,则跨越数百公里去修复一个BUG是效率非常低的一种方式。远程调试是更好的选择。
(2)BUG机上没有部署开发环境,比如安装Visual Stdio,下载到部署一个开发环境要花1个小时左右,这有时候可能是无法接受的时间消耗。
(3)即使有充足的时间部署开发环境,开发人员的代码大部分情况下我想都是属于机密文档,所以将代码拷贝至BUG机调试就极有可能造成机密泄漏,得不偿失。

如上所述,这种情形下,不拷贝代码不部署开发环境的远程调试方式将是不错的选择。也是本文所要介绍的主题。

准备

  1. 开发机部署Visual Stdio环境,这是对于开发人员轻车熟路的一步。本文的介绍都基于Visual Studio 2015环境。
  2. 有条件将开发机与调试机(BUG机)连接至同一个局域网,若无条件本文后面会介绍基于TeamView VPN的外网调试方法。
  3. 在开发机Visual Stdio安装目录找到远程调试工具目录。一般位置在C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Remote Debugger。
  4. 找到要调试模块的.pdb文件,编译生成的exe和dll都会带有pdb文件。
  5. 开发机和调试机都安装远程通信工具如TeamView,便于开发人员在一端全操作。

Visual Stdio远程调试步骤

  1. 将Remote Debugger对应版本(x64 & x86)的目录拷贝至调试机,或者Remote Debugger整个目录拷贝过去。目录图如下:
    Visual Studio C++ 远程调试_第1张图片
  2. 将调试模块的.pdb文件拷贝至调试机,放在需要调试的对象同级目录下,比如要调试exe则放到和exe同级目录下,要调试dll则放在和dll同级目录下。
  3. 打开Remote Debugger对应的版本目录(若调试的是64位程序或库,则打开x64目录,反之则打开x84目录),找到远程调试工具msvsmon.exe并点击执行。第一次运行会出现对话框:
    Visual Studio C++ 远程调试_第2张图片
    默认,点击配置远程调试。然后出现远程调试工具面板:
    Visual Studio C++ 远程调试_第3张图片
    点击工具-选项,出现对话框,在身份验证模式一栏,选择无身份验证,勾选允许任何用户进行调试,点击确定。
    Visual Studio C++ 远程调试_第4张图片
    之后调试工具的面板会变成
    Visual Studio C++ 远程调试_第5张图片
  4. 在查看调试机的IP地址,打开cmd控制台面板,输入命令ipconfig即可查看。
    Visual Studio C++ 远程调试_第6张图片
    Visual Studio C++ 远程调试_第7张图片
    Visual Studio C++ 远程调试_第8张图片
    如果开发机和调试机在同一个有线局域网,则记录其中的有线网IP地址;若两者分属不同的外网,则记录与外部网络连接的IP地址。
  5. 在开发机打开需要调试的工程,有两种方式启动调试:
    (1) 在调试机上启动程序,在开发机上使用附加到进程的方式来调试。
    (2) 直接在开发机上通过调试菜单(F5)启动调试。
    我们首先看第一种,一般算法库调试经常会用到这种方式,即先启动前端程序,再将算法库工程附加到启动的程序进程进行调试。操作步骤为:
      1) 在Visual Stdio菜单点击调试(Debug)-附加到进程(Attach to Process)
    Visual Studio C++ 远程调试_第9张图片
      2) 在传输(Transport)一栏选择远程调试(Remote)方式,在限定符(Qualifier)一栏输入调试机的IP地址,点击右下角的Refresh
    Visual Studio C++ 远程调试_第10张图片
      3) 如果开发机和调试机连接成功,则可用进程(Available Processes)表格中会出现调试机上运行的所有进程,找到需要调试的进程,选中,点击右下角的Attach。
    Visual Studio C++ 远程调试_第11张图片
    再来看第二种:在开发机上直接F5运行调试。
      1) 打开需要调试的工程属性面板,在配置属性栏点击调试(Debugging)页面,选择远程调试器,并按照图示填入相关信息,点击应用或确定。
    Visual Studio C++ 远程调试_第12张图片
      2) 关闭属性页面,将调试器设置为远程调试器。
    在这里插入图片描述  3) 直接在Visual Studio页面按F5启动调试。

基于TeamView NPV的外网远程调试

Visual Stdio的远程调试模块原则上只支持同一个局域网内的两端调试,所以如果没有使用特殊手段,是无法应用于两端分属不同外网的情况的。但是实际情况是,开发机和调试机在不同的外网的情况比比皆是。所以本文介绍基于TeamView NPV(为跳过屏蔽,倒过来写,请谅解)的外网远程调试方法。

NPV是一种利用互联网等公共网络架设内网的网络技术,能让内网及其资源无缝覆盖全球。它在主机和客户端之间通过创建安全数据通讯通道或虚拟点对点访问来实现专用网络。建立连接后,设备之间数据的发送和接受将具有类似在同一个专用网络中一样的安全、功能和管理。

简单来说,NPV可帮助我们将开发机和调试机放到同一个虚拟内网中,这样就可以使用远程调试工具了。具体方法为:
在TeamView软件中安装NPV模块:
选择其他-选项
Visual Studio C++ 远程调试_第13张图片
在高级标签页面,点击显示高级选项
Visual Studio C++ 远程调试_第14张图片
拉到高级网络设置栏,点击安装NPV驱动程序,我这里已经安装了,所以显示的是卸载NPV,没有安装的机子显示的是安装NPV。
Visual Studio C++ 远程调试_第15张图片
安装后在主页面选择NPV,并连接远程机。
Visual Studio C++ 远程调试_第16张图片
连接成功后,会出现远程机虚拟的IP地址,将该IP地址记录下来,后面的操作就和内网的操作方式一样了。需要注意的是,开发机和远程机的TeamView都要安装上NPV。

你可能感兴趣的:(开发经验)