1. Native 程序

程序崩溃时,windows系统会调用系统默认调试器,其设置在注册表
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
(注:64位windows的上的路径不同,在HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\)
这里面有2个主要的值:

Auto
= 0 的时候,系统会弹出一个对话框,让你在几个调试器中选择(如果你的系统安装了多个调试器的话)
= 1 的时候,系统会自动调用默认调试器

Debugger
  默认调试器的路径。
  比如windows自带的Dr.Watson : DRWTSN32 -p %ld -e %ld –g 
  Visual Studio JIT debugger: "C:\Windows\system32\vsjitdebugger.exe" -p %ld -e %ld 
  或者是WinDBG: windbg.exe" -p %ld -e %ld –g   
Tip:
如果想把windbg设置成默认调试器,可以运行windbg.exe -I 命令,windbg会自动完成设置。

-p和-e是调试器的一些命令行参数,而%ld则是一个占位符,Windows会把死亡的进程的PID替换%ld这个值(读者如果熟悉批处理编程的话,就应该知道%ld实际上是批处理程序的参数的声明方式)。
vsjitdebugger.exe是Visual Studio用来处理验尸调试的调试器名称,如果你安装了Visual Studio,VS的安装程序应该会自动为你设置好这个键。
Auto:如果值是1的话,那么windows就会自动在进程死亡的时候,启动调试器;如果为0的话,就会打开一个对话框问你是否要执行验尸调试—但是Windows 7如果是这个选项的话,会直接禁用验尸调试,因此我推荐将Auto的值总是设置成1。

Test.cpp

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
     int *p = NULL;
     // 触发一个异常
     *p = 0;
    return 0;
}

cl.exe /Zi test.cpp

2. 托管程序

上面的设置仅对native程序有效,如果要设置托管程序的默认验尸调试器,在""HKEY_LOCAL_MACHINE"Software"Microsoft".NETFramework里面,分别创建下面两个键:
DbgManagedDebugger   REG_SZ "C:"Windows"system32"vsjitdebugger.exe" PID %d APPDOM %d EXTEXT "%s" EVTHDL %d
DbgJITDebugLaunchSetting  REG_DWORD  2
使用上面的设置,你应该可以做所有非Winform托管程序的验尸调试了。
3. Winform程序

当你的Win form程序崩溃(Crash)的时候,你会发现你设置的默认验尸调试器没有运行起来,原因是因为Win form程序默认禁用了即时调试(JIT Debug)的功能。因此要设置Win form程序的默认验尸调试器,你除了做上面的步骤以外,你还要将Win form程序的即时调试功能打开。打开的方法:

a. 修改你机器的machine.config文件,这样机器上所有的Win form程序都会将这个即时调试功能打开。在<configuration>里面添加下面一行:
<system.windows.forms jitDebugging="true" />

b. 修改单独程序的的app.config文件打开单个Win form程序的即时调试功能。在<configuration>里面添加下面一行:
<system.windows.forms jitDebugging="true" />

例如:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.windows.forms jitDebugging="true" />
</configuration>

Image File Execution Options

如果要调试的进程,也就是debuggee,is spawn by another process, 要用到"Image File Execution Options" technique to automatically attach it to windbg when it's started.

1. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options"
2. 新建一个键(Key),键名就是你要调试的程序的文件名,例如notepad.exe
3. 然后在这个新建的键值(Key)下,新建一个字符串值(String Value)Debugger,值设置为你喜欢的调试器:
     a. 如果选择Visual Studio的话,就是C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe
     b. 选择Windbg的话,就是c:\debuggers\windbg.exe
设置好了以后,启动notepad.exe,这个时候你选择的调试器就会被Windows先启动起来,然后在notepad.exe的入口处中断。

转载于:https://www.cnblogs.com/yefengmeander/archive/2011/10/27/2887659.html

Attach Debugger相关推荐

  1. 分享一个android debug模式,出现 waiting for debugger把界面卡住,取巧的解决办法

    使用android studio开发程序时,有时会出现 waiting for debugger 卡住界面,软件无法正常debug运行的情况,很多网友分享了一些解决办法,比如: 1 打开cmd进入命令 ...

  2. 模拟器 waiting for debugger

    转载:https://blog.csdn.net/u010775335/article/details/76281347 转载:https://blog.csdn.net/u013408979/art ...

  3. linux ptrace反调试之抢占ptrace

    ptrace和debugger原理 ptrace ptrace可以让一个进程监视和控制另一个进程的执行,并且修改被监视进程的内存.寄存器等,主要应用于断点调试和系统调用跟踪. 函数原型: long p ...

  4. Linux上程序调试的基石(2)--GDB

    3. GDB的实现  GDB是GNU发布的一个强大的程序调试工具,用以调试C/C++程序.可以使程序员在程序运行的时候观察程序在内存/寄存器中的使用情况.它的实现也是基于ptrace系统调用来完成的. ...

  5. 最强 Android Studio 使用小技巧和快捷键

    写在前面 本文翻译自 Android Studio Tips by Philippe Breault,一共收集了62个 Android Studio 使用小技巧和快捷键. 根据这些小技巧的使用场景,本 ...

  6. The powerful Android Studio

    英文来源: The powerful Android Studio 作者: Saúl Molinero(@saulmm),感谢作者对本篇文章的翻译授权. 译者: D_clock爱吃葱花 校对: 汤涛( ...

  7. 如何调试Android Framework?

    Linus有一句名言广为人知:Read the fucking source code. 但其实,要深入理解某个软件.框架或者系统的工作原理,仅仅「看」代码是远远不够的.就拿Android Frame ...

  8. Android Studio 小技巧/快捷键 合集

    原文链接: Android Studio Tips by Philippe Breault 原文作者 : Philippe Breault 译文出自 : 掘金翻译计划 译者 : Jaeger, Bru ...

  9. vc2010中开始执行不调试灰的_反编译动态调试smali全过程

    点击上方蓝字关注我,每天进步一点点 大家都知道我们在逆向分析的时候,很多时候主要在分析逻辑.网络抓包.数据来源流向分析.页面逻辑跳转分析.动态调试等.由于很多代码都会混淆,很多时候我们直接通过代码可能 ...

  10. Android FrameWork学习(二)Android系统源码调试

    点击打开链接 通过上一篇 Android FrameWork学习(一)Android 7.0系统源码下载\编译 我们了解了如何进行系统源码的下载和编译工作. 为了更进一步地学习跟研究 Android ...

最新文章

  1. hive-数据倾斜记录分享
  2. VC mfc 多文档程序更改子文档标题名
  3. 【深度学习】当YOLOv5遇见OpenVINO!
  4. 区间调度之区间合并问题
  5. CSS改变插入光标颜色
  6. P4151-[WC2011]最大XOR和路径【线性基】
  7. Windows/Linux安装python2.7,pycharm和pandas——《利用Python进行数据分析》
  8. 爱护身体之简易程序员健身操
  9. Redis系列(七)--Sentinel哨兵模式
  10. STL MAP用法详解
  11. python--os模块
  12. Python|LeetCode习题答案汇总
  13. git把一个分支上的某次提交同步到另一个分支上
  14. 使用Oracle的sshUserSetup.sh脚本配置SSH互信
  15. Pr 2019版安装教程
  16. 结构体所占字节数的计算
  17. 处理png图片为透明
  18. 点击跳转打开新页--------window.open
  19. Java Web应用开发实用教程,JavaWeb应用开发实用教程习题部分汇总
  20. Flutter:加载本地Html、WebView与JS交互

热门文章

  1. php aria2离线下载器,下载神器——Aria2,打造你自己的离线下载服务器
  2. 福大软工 · 真 · 最终作业
  3. 万字胶囊网络超详细总结(原理加pytorch代码)
  4. 论文开题报告怎么写?
  5. python藏头诗生成器_藏头诗生成器
  6. Android基于opencv4.6.0实现人脸识别功能
  7. php 实现人脸识别功能
  8. 无源贴片晶振四角引脚_四脚贴片晶振有方向之分吗
  9. 小赛毛游C记——分支和循环语句(1)
  10. Origin图选择性粘贴到word出现问题,提示‘word出现问题’解决方法