调试器基础
来源:互联网 发布:阿里云400电话 编辑:程序博客网 时间:2024/06/07 09:25
在Windows中,Windows API CreateProcess提供了一个枚举值允许你的程序调试其他的程序,比如下面的代码就是创建一个调试器的最基本的步骤:
1. 启动一个程序,并指定你希望调试这个程序—例如DEBUG_PROCESS
2. 然后监听Windows给你的程序发送的各种调试消息,例如被调试程序正在加载一个新的DLL(不管是静态调用还是动态调用),被调试程序正在创建一个新的线程等等。
下面的代码演示了如何编写一个最简单的调试器 – 监听被调试的程序里面所触发的异常然后根据异常类型进行相应的处理:
#include "stdafx.h"
#include
extern "C" __declspec(dllexport) DWORD CreateProcessHelper(LPTSTR lpCommandName, STARTUPINFO *pStartInfo)
{
PROCESS_INFORMATION info;
ZeroMemory(&info, sizeof(PROCESS_INFORMATION));
if ( !CreateProcess(NULL,
lpCommandName,
NULL,
NULL,
FALSE,
DEBUG_PROCESS | CREATE_SUSPENDED | DEBUG_ONLY_THIS_PROCESS,
NULL,
NULL,
pStartInfo,
&info) )
{
return GetLastError();
}
::CloseHandle(info.hProcess);
DEBUG_EVENT debugEv;
ZeroMemory(&debugEv, sizeof(DEBUG_EVENT));
::ResumeThread(info.hThread);
for ( ; ; )
{
WaitForDebugEvent(&debugEv, INFINITE);
DWORD exceptionCode = 0;
switch (debugEv.dwDebugEventCode)
{
case EXCEPTION_DEBUG_EVENT:
exceptionCode = debugEv.u.Exception.ExceptionRecord.ExceptionCode;
if ( exceptionCode == 0x80000003 )
break;
else
{
::TerminateProcess(info.hProcess, exceptionCode);
return exceptionCode;
}
case EXIT_PROCESS_DEBUG_EVENT:
return 0;
default:
break;
}
ContinueDebugEvent(debugEv.dwProcessId,
debugEv.dwThreadId,
DBG_CONTINUE);
}
}
- 调试器基础
- GDB调试器基础
- 软件调试基础--05Windbg调试器基础
- 【Linux基础】Gdb调试器
- GDB调试器基础命令
- 调试基础
- 调试基础
- gdb (GNU 调试器):基础
- gdb (GNU 调试器):基础
- Windows基础调试器(BASIC DEBUGGER)
- JAVA调试技术--基础
- GDB调试基础
- VC项目调试基础
- VC项目调试基础
- python pdb 基础调试
- VC项目调试基础
- GDB 调试基础
- GDB调试基础备忘
- 云计算
- Thinking in Java超清晰中文版 (经典教材,收藏精品)
- 二分插入排序 和 二分检索
- log4j使用大全
- log4j 高级话题 NDC
- 调试器基础
- 实时股票数据获取方式
- 如何用PHP发电子邮件(二)
- 一些面试就业Tips送给在校生
- COLLADA DOM Tutorial
- 写在正月十六凌晨
- 潜心开始学习网络编程的第一步 ,UNP(Unix Network Programming)第一章,时间服务器到windows的移植
- 使用Ogre的開源虛擬社群─realXtend
- Hibernate 学习