Attach Debugger
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相关推荐
- 分享一个android debug模式,出现 waiting for debugger把界面卡住,取巧的解决办法
使用android studio开发程序时,有时会出现 waiting for debugger 卡住界面,软件无法正常debug运行的情况,很多网友分享了一些解决办法,比如: 1 打开cmd进入命令 ...
- 模拟器 waiting for debugger
转载:https://blog.csdn.net/u010775335/article/details/76281347 转载:https://blog.csdn.net/u013408979/art ...
- linux ptrace反调试之抢占ptrace
ptrace和debugger原理 ptrace ptrace可以让一个进程监视和控制另一个进程的执行,并且修改被监视进程的内存.寄存器等,主要应用于断点调试和系统调用跟踪. 函数原型: long p ...
- Linux上程序调试的基石(2)--GDB
3. GDB的实现 GDB是GNU发布的一个强大的程序调试工具,用以调试C/C++程序.可以使程序员在程序运行的时候观察程序在内存/寄存器中的使用情况.它的实现也是基于ptrace系统调用来完成的. ...
- 最强 Android Studio 使用小技巧和快捷键
写在前面 本文翻译自 Android Studio Tips by Philippe Breault,一共收集了62个 Android Studio 使用小技巧和快捷键. 根据这些小技巧的使用场景,本 ...
- The powerful Android Studio
英文来源: The powerful Android Studio 作者: Saúl Molinero(@saulmm),感谢作者对本篇文章的翻译授权. 译者: D_clock爱吃葱花 校对: 汤涛( ...
- 如何调试Android Framework?
Linus有一句名言广为人知:Read the fucking source code. 但其实,要深入理解某个软件.框架或者系统的工作原理,仅仅「看」代码是远远不够的.就拿Android Frame ...
- Android Studio 小技巧/快捷键 合集
原文链接: Android Studio Tips by Philippe Breault 原文作者 : Philippe Breault 译文出自 : 掘金翻译计划 译者 : Jaeger, Bru ...
- vc2010中开始执行不调试灰的_反编译动态调试smali全过程
点击上方蓝字关注我,每天进步一点点 大家都知道我们在逆向分析的时候,很多时候主要在分析逻辑.网络抓包.数据来源流向分析.页面逻辑跳转分析.动态调试等.由于很多代码都会混淆,很多时候我们直接通过代码可能 ...
- Android FrameWork学习(二)Android系统源码调试
点击打开链接 通过上一篇 Android FrameWork学习(一)Android 7.0系统源码下载\编译 我们了解了如何进行系统源码的下载和编译工作. 为了更进一步地学习跟研究 Android ...
最新文章
- hive-数据倾斜记录分享
- VC mfc 多文档程序更改子文档标题名
- 【深度学习】当YOLOv5遇见OpenVINO!
- 区间调度之区间合并问题
- CSS改变插入光标颜色
- P4151-[WC2011]最大XOR和路径【线性基】
- Windows/Linux安装python2.7,pycharm和pandas——《利用Python进行数据分析》
- 爱护身体之简易程序员健身操
- Redis系列(七)--Sentinel哨兵模式
- STL MAP用法详解
- python--os模块
- Python|LeetCode习题答案汇总
- git把一个分支上的某次提交同步到另一个分支上
- 使用Oracle的sshUserSetup.sh脚本配置SSH互信
- Pr 2019版安装教程
- 结构体所占字节数的计算
- 处理png图片为透明
- 点击跳转打开新页--------window.open
- Java Web应用开发实用教程,JavaWeb应用开发实用教程习题部分汇总
- Flutter:加载本地Html、WebView与JS交互
热门文章
- php aria2离线下载器,下载神器——Aria2,打造你自己的离线下载服务器
- 福大软工 · 真 · 最终作业
- 万字胶囊网络超详细总结(原理加pytorch代码)
- 论文开题报告怎么写?
- python藏头诗生成器_藏头诗生成器
- Android基于opencv4.6.0实现人脸识别功能
- php 实现人脸识别功能
- 无源贴片晶振四角引脚_四脚贴片晶振有方向之分吗
- 小赛毛游C记——分支和循环语句(1)
- Origin图选择性粘贴到word出现问题,提示‘word出现问题’解决方法