由于本人能力有限,翻译不足之处敬请谅解,欢迎批评指正:sunylat@163.com

Visual Studio版本:Visual Studio 2015企业版,中文环境。

MSDN原文:https://msdn.microsoft.com/zh-cn/library/windows/hardware/hh406273(v=vs.85).aspx

在Visual Studio里,你可以使用Windows用户模式调试器 (Windows User Mode Debugger),把一个正在运行的进程或者产物附加到一个新进程。进程能够运行在正在运行调试器的同一台电脑上,也可以运行在不同的电脑上。

在同一台电脑上附加一个正在运行的进程

  1. 在Visual Studio 2015里,从“调试”菜单,选择“附加到进程”;其它版本Visual Studio从“工具”菜单,选择“附加到进程”。
  2. 在“附加到进程”对话框中,把“传输”设为“Windows User Mode Debugger”,随后设置“限定符”为“Localhost”。
  3. 在“可用进程”列表中,选择要附加的进程。
  4. 点击“附加”按钮。

非侵入性调试

如果你像调试一个正在运行的进程,并且想把对它运行的影响限制在最小程度,你应该非侵入性调试这个进程noninvasively

在同一台电脑上产生一个新进程

  1. 在Visual Studio里,从“工具”菜单,选择“Launch Under Debugger”。
  2. 在"Launch Under Debugger"对话框中,在”Path to the executable file“文本框中输入要附加程序路径信息,你可以在"Arguments"文本框里面输入参数,在"Working directory"文本框中输入工作目录。
  3. 点击"Launch"按钮。

调试器创建的进程(also known as spawned processes)和不是调试器创建的进程表现有一些不同。

代替使用标准堆API,调试器创建的进程使用一种特殊的调试堆。你可以强制一个(spawned processes)使用标准堆来替换调试堆,通过使用 _NO_DEBUG_HEAP 环境变量实现。

另外,因为目标程序是调试器的一个子进程,它继承了调试器的权限,这种权限可能让目标程序能够执行某些在其它时候不允许的行为,例如:目标程序可能会影响到保护进程。

 从分开的电脑上附加一个正在运行的进程

有时候,调试器和要被调试的代码运行在不同的电脑上。运行调试器的电脑叫主机(host computer),运行被调试代码的电脑叫目标机(target computer)。你可以配置目标机从主机上的Visual Studio里。配置目标机也被叫做(provisioning)目标机,更多信息,查看: Provision a computer for driver deployment and testing (WDK 8.1).

配置完目标机之后,你可以在主机的Visual Studio里附加一个正运行在目标机中的进程。

  1. 在Visual Studio 2015里,从“调试”菜单,选择“附加到进程”;其它版本Visual Studio从“工具”菜单,选择“附加到进程”。
  2. 在“附加到进程”对话框中,把“传输”设为“Windows User Mode Debugger”,随后设置“限定符”为目标机。
  3. 在“可用进程”列表中,选择要附加的进程。
  4. 点击“附加”按钮。

注意:如果你使用不同电脑作为主机和目标机,不要在目标机中安装Visual Studio和WDK,如果Visual Studio和WDK安装到目标机上了就支持调试了。

使用Visual Studio调试用户模式进程(Debugging a User-Mode Process Using Visual Studio)的更多相关文章

  1. Visual Studio 调试 —— 附加到进程(远程服务器)

    一般在部署环境下不会有 Visual Studio 开发工具的,所以需要有 Remote Debugger(远程调试器) 才可以进行远程调试. Remote Debugger 获取 方法一:Visua ...

  2. Visual Studio 调试 —— 附加到进程

    第一步:通过管理员方式打开想要附加到进程的项目. 第二步:在 “附加到进程” 对话框中的 “可用进程” 列表中,找到要附加到的程序.我的以 MyProgressTest 为例.选择调试 / 附加到进程 ...

  3. 用Visual Studio调试Windows和驱动程序

    由于本人能力有限,翻译不足之处敬请谅解,欢迎批评指正:sunylat@163.com Visual Studio版本:Visual Studio 2015企业版,中文环境. MSDN原文:https: ...

  4. Visual Studio调试之断点进阶篇

    Visual Studio调试之断点进阶篇 在上一篇文章Visual Studio调试之断点基础篇里面介绍了什么是断点,INT 是Intel系列CPU的一个指令,可以让程序产生一个中断或者异常.程序中 ...

  5. android studio 调试技巧(简直太好用)

    android studio 调试技巧(简直太好用) 说到android studio的调试,很多人可能会说,这有什么可讲的不就是一个断点调试么,刚开始我也是这么认为的,直到我了解之后,才发现,调试原 ...

  6. 用户模式 Linux 移植

    用户模式 Linux (UML) 是一个有趣的概念. 它被构建为一个分开的 Linux 内核移植, 有 它自己的 arch/um 子目录. 它不在一个新的硬件类型上运行, 但是; 相反, 它运行在一 ...

  7. Visual Studio 调试系列10 附加到正在运行的进程

    系列目录     [已更新最新开发文章,点击查看详细] 可将 Visual Studio 调试器附加到本地或远程计算机上正在运行的进程. 进程运行后,在 Visual Studio 中选择“调试” & ...

  8. Visual Studio Code调试electron主进程

    Visual Studio Code调试electron主进程 作者: jekkay 分类: electron 发布时间: 2017-06-11 14:56  一·概述 此文原出自[水滴石]: htt ...

  9. Visual Studio远程调试监视器(MSVSMON.EXE)的32位版本不能用于调试64位进程或64位转储

    在VS2013中调试Silverlight项目时,提示:无法附加.Visual Studio远程调试监视器(MSVSMON.EXE)的32位版本不能用于调试64位进程或64位转储.请改用64位版本. ...

随机推荐

  1. CentOS7下安装MySQL5.7安装与配置(转)

    原文地址:http://www.centoscn.com/mysql/2016/0626/7537.html 安装环境:CentOS7 64位 MINI版,安装MySQL5.7 1.配置YUM源 在M ...

  2. [非原创]eclipse中一些常见svn图标的含义

    项目视图   The Package Explorer view - 已忽略版本控制的文件.可以通过Window → Preferences → Team → Ignored Resources.来忽 ...

  3. IO流一行一行读取TXT文件

    我们在开发或者测试的时候,往往会用到读取本地txt文件内容来处理数据的情况.下面是读取本地txt文件内容,是一行一行读取.如下列txt例子 小明 20 小红 20 小亮 20 下面是代码: publi ...

  4. 《C专家编程》第三章——分析C语言的声明

    前面一章我们已经说过C语言存在的一些问题和它晦涩的地方,让我们对这门神奇的语言有了更深的了解.现在这一章则集中精力来讨论C语言的声明,分为三块,首先是说明C语言声明晦涩难懂的原因和声明是如何形成的,其 ...

  5. Ecstore会员密码加密方式破解

    <?php //以下是加密方式,亲测有效 $string_md5 = md5(md5("密码")."用户名"."注册时间");//三个 ...

  6. java通过反射取得一个类的完整结构

    首先我们在person包中新建一个Person.java: package person; import sex.Sex; public class Person{ private String na ...

  7. clang编译器简介

    本文部分内容引用: 中文维基百科. 结构化编译器前端--clang介绍. 什么是clang编译器? clang是LLVM编译器工具集的一个用于编译C.C++.Objective-C的前端.LLVM项目 ...

  8. label标签使用过程中遇到的问题

    最近在做东西时候使用到了label标签,由于之前很少使用label标签,所以就遇到一个很奇怪的问题.什么问题呢?下面来看一个效果 <!DOCTYPE html> <html> ...

  9. Qt and C++ Reflection,利用Qt简化C++的反射实现

    如何在C++中实现反射机制,应该算是C++开发中经常遇到的问题之一.C++程序没有完整的元数据,也就无法实现原生的反射机制.从性能的角度讲,这样的设计不难理解,毕竟在运行时储存这些元数据需要额外的开销 ...

  10. sql中的跨库查询

    在sql查询时,需要关联2个服务器上的不同数据库,只需要在所需查询的表名前加上服务器地址即可. 例如:在 192.168.0.15,8020的db110库 和 192.168.0.150,8082的d ...