即时调试

原创 2004年08月19日 22:05:00
即时调试
随时将调试程序连接到任何进程的能力称为即时调试(Just-in-timeDebugging)。这里我们对它如何工作稍加说明:当程序员点击Cancel按钮,就是告诉UnhandledExceptionFilter函数对进程进行调试。
在内部,UnhandledExceptionFilter调用调试程序,这需要查看下面的注册表子关键字:
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/AeDebug
在这个子关键字里,有一个名为Debugger的数值,在安装VisualStudio时被设置成下面的值:
"C:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin/msdev.exe" -p %ld -e %ld
Windows98在Windows98中,这些值不是存放在注册表中,而是存放在Win.ini文件中。
这一行代码是告诉系统要将哪一个程序(这里是MSDev.exe)作为调试程序运行。当然也可以选择其他调试程序。UnhandledExceptionFilter还在这个命令行中向调试程序传递两个参数。第一个参数是被调试进程的ID。第二个参数规定一个可继承的手工复位事件,这个事件是由UnhandledExceptionFilter按无信号状态建立的。厂商必须实现他们的调试程序,这样才能认识指定进程ID和事件句柄的-p和-e选项。
在进程ID和事件句柄都合并到这个串中之后,UnhandledExceptionFilter通过调用CreateProcess来执行调试程序。这时,调试程序进程开始运行并检查它的命令行参数。如果存在-p选项,调试程序取得进程ID,并通过调用DebugActiveProcess将自身挂接在该进程上。
BOOL DebugActiveProcess(DWORD dwProcessID);
一旦调试程序完成自身的挂接,操作系统将被调试者(debuggee)的状态通报给调试程序。
在调试程序完全初始化之后,它要再检查它的命令行,找-e选项。如果该选项存在,调试程序取得相应的事件句柄并调用SetEvent。调试程序可以直接使用事件的句柄值,因为事件句柄具有创建的可继承性,并且被调试进程对UnhandledExceptionFilter函数的调用也使调试程序进程成为一个子进程。
设定这个事件将唤醒被调试进程的线程。被唤醒的线程将有关未处理异常的信息传递给调试程序。调试程序接收这些通知并加载相应的源代码文件,再将自身放在引发异常的指令位置上。
还有,不必在调试进程之前等待异常的出现。可以随时将一个调试程序连接在任何进程上,只需运行“MSDEV-pPID”,其中PID是要调试的进程的ID。实际上,利用Windows2000 TaskManager,做这些事很容易。当观察Process标记栏时,可以选择一个进程,点击鼠标右键,并选择Debug菜单选项。这将引起TaskManager去查看前面讨论过的注册表子关键字,调用CreateProcess,并传递所选定的进程的ID作为参数。在这里,TaskManager为事件句柄传送0值。

掌握VS2010调试 -- 入门指南

转载自:http://blog.csdn.net/kingzone_2008/article/details/8133048 目录(?)[+] 1 导言...
  • u012377333
  • u012377333
  • 2015年03月11日 11:44
  • 499

C# 调试方法之即时窗口输出

1,非中断模式下的调试。 利用系统“输出”窗口。(视图-输出)来打印调试信息。有Debug和Release两种版本,通过运行按钮右边的选项可以选择程序的运行方式。而对应的现实调试信息的方法也不同...
  • CNHK1225
  • CNHK1225
  • 2015年05月15日 17:12
  • 7045

即时编译 理解

PyPy 用 JIT (Just-in-time compilation) 来大幅提高性能。既然这么好,为什么 CPython,Ruby 不用 JIT ?是不是 Java 这样的静态语言容易实现 JI...
  • pzqingchong
  • pzqingchong
  • 2016年11月10日 20:39
  • 740

C++即时通讯实现原理及常见问题

今天的心灵是一面镜子的即时通讯,客栈,C++即时通讯实现原理及常见问题,心灵是一面镜子,猛地从舱壁内传出说话声,一个胸前印有009的机器人走了出来,我有点魂飞魄散,尊敬的即时通讯小地球人,是一支用心歌...
  • i_like_cpp
  • i_like_cpp
  • 2013年04月22日 08:27
  • 2491

js中的即时函数

window.onload = function(){ //即时函数1 (function(){ alert('watch out 1!'); }()); ...
  • qq418716640
  • qq418716640
  • 2013年06月21日 14:44
  • 2724

即时到账交易接口和有密退款接口

1.支付宝文档链接,结合文档操作 https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.cc74t4&treeId=62&art...
  • u011287511
  • u011287511
  • 2017年01月10日 16:15
  • 1008

即时引爆社交红利2.0(读书笔记)

即时引爆社交红利2.0
  • zengraoli
  • zengraoli
  • 2016年03月29日 09:11
  • 870

即时通信和实时通信的区别

即时通信(im)和实时通信(声网Agora.io)都是一套网络通信系统,其本质都是对信息进行转发。其最大的不同点,是对信息传递的时间规定。二者的区别可以从以下几个方面: 一、场景 常见的即时通信场...
  • agora_cloud
  • agora_cloud
  • 2016年06月22日 11:18
  • 4127

java 实现即时聊天设计(利用ip进行远程通信)

先看下效果图,一端运行在远程服务器,一端在本机电脑上运行,在局域网内两端可正常通信,由于我学校网络是局域网,所以外网ip接收得到消息,反之外网发消息过来本机收不到。不是局域网的同学理论上可以直接通信。...
  • An_Illusion
  • An_Illusion
  • 2016年06月28日 02:33
  • 3080

即时通信之Bmob开发06

cn.bmob.v3  类 BmobObject java.lang.Object cn.bmob.v3.BmobObject 所有已实现的接口:java.io.Serializable ...
  • Anddroid_LanYan
  • Anddroid_LanYan
  • 2015年04月13日 10:09
  • 649
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:即时调试
举报原因:
原因补充:

(最多只允许输入30个字)