由于本人能力有限,翻译不足之处敬请谅解,欢迎批评指正: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. [GodLove]Wine93 Tarining Round #7

    比赛链接: http://vjudge.net/contest/view.action?cid=47643#overview 比赛来源: 2012 ACM/ICPC Asia Regional Han ...

  2. 关于OpenGL的绘制上下文

    什么是绘制上下文(Rendering Context) 初学OpenGL,打开红宝书,会告诉你OpenGL是个状态机,OpenGL采用了客户端-服务器模式,那时觉得好抽象,直到后来了解了绘制上下文才把 ...

  3. webclient的简单实用

    这是我在项目中调用别人写好的接口口是使用的1.简单的url传参 List<ArticleModel> result = new List<ArticleModel>(); st ...

  4. JDBC连接数据库(PreparedStatement)

    PreparedStatement是在数据库端防止SQL注入漏洞的SQL方法这里演示了一些基本使用方法同样使用Oracle数据库,之前已经手动建立了一张t_account表数据库代码参见上一篇< ...

  5. 迅达云s3cmd客户端mac平台部署说明

    自己根据文档整理了下,在这里记下,免得其他兄弟走弯路. 1 下载最新的s3cmd代码 https://github.com/s3tools/s3cmd/archive/master.zip 2 解压缩 ...

  6. Javascript中的数组方法总结

    1.concat():将两个或多个数组合并成一个数组 arrayObject.concat(arrayX,arrayX,......,arrayX),返回一个新的数据,arrayX可以是数值也可以是数 ...

  7. php用smtp发送邮件

    php用smtp发送邮件 1.其实用smtp协议发送邮件很简单,用框架或者原生都可以,我们需要用到class.phpmailer.php 和class.smtp.php,大家可以去网上下载. 这是一个 ...

  8. Linux删除apt-get安装的软件

    我们都知道安装软件最简单的方法是apt-get install,但是卸载就不常用了,如何卸载呢?1.sudo apt-get remove xxxxxsudo apt-get autoremove2. ...

  9. 第十章 嵌入式Linux的调用技术

    HAL是建立在Linux驱动之上的一套程序库,这套程序库并不属于Linux内核,而属于linux内核层之上的应用层.  在本章中还介绍了为什么要在Android中加入HAL,统一硬件的调用接口,由于H ...

  10. S3C2440的Linux启动过程分析(一)——SC2440处理器结构

    1.1.     S3C2440处理器结构 S3C2440处理器的结构如下图所示,其核心单元为ARM9TDMI处理器核,主要包括16K的指令Cache和16K的数据Cache,以及分开的指令和数据MM ...