在每个被调试进程创建前,都会向调试进程发一个EXCEPTION_BREAKPOINT。但是,我的程序中,对这个事件的处理,为什么没有执行呢?
#include"windows.h"
#include"Winnt.h"
//#include"TCHAR.h"
void main()
{
DEBUG_EVENT DBEvent;
STARTUPINFO sif={0};
sif.cb=sizeof(sif);
PROCESS_INFORMATION pi={0}; BOOL STOP=0;
CreateProcess(NULL,"\"c:\\Win-TC\\Win-TC.exe\"" ,NULL,NULL,NULL,
DEBUG_PROCESS|DEBUG_ONLY_THIS_PROCESS,NULL,NULL,&sif,&pi);
do{
WaitForDebugEvent(&DBEvent,INFINITE);
DWORD dwState=DBG_EXCEPTION_NOT_HANDLED;
switch(DBEvent.dwDebugEventCode)
{
case EXCEPTION_DEBUG_EVENT:
{
switch(DBEvent.u.Exception.ExceptionRecord.ExceptionCode)
{ case EXCEPTION_BREAKPOINT:
{dwState=DBG_CONTINUE;
break;}
}
break;
}
case EXIT_PROCESS_DEBUG_EVENT:
{
STOP=TRUE;
break;
}
}
if(!STOP)
{ContinueDebugEvent(pi.dwProcessId,pi.dwThreadId,dwState);}
}while(!STOP);
}
#include"windows.h"
#include"Winnt.h"
//#include"TCHAR.h"
void main()
{
DEBUG_EVENT DBEvent;
STARTUPINFO sif={0};
sif.cb=sizeof(sif);
PROCESS_INFORMATION pi={0}; BOOL STOP=0;
CreateProcess(NULL,"\"c:\\Win-TC\\Win-TC.exe\"" ,NULL,NULL,NULL,
DEBUG_PROCESS|DEBUG_ONLY_THIS_PROCESS,NULL,NULL,&sif,&pi);
do{
WaitForDebugEvent(&DBEvent,INFINITE);
DWORD dwState=DBG_EXCEPTION_NOT_HANDLED;
switch(DBEvent.dwDebugEventCode)
{
case EXCEPTION_DEBUG_EVENT:
{
switch(DBEvent.u.Exception.ExceptionRecord.ExceptionCode)
{ case EXCEPTION_BREAKPOINT:
{dwState=DBG_CONTINUE;
break;}
}
break;
}
case EXIT_PROCESS_DEBUG_EVENT:
{
STOP=TRUE;
break;
}
}
if(!STOP)
{ContinueDebugEvent(pi.dwProcessId,pi.dwThreadId,dwState);}
}while(!STOP);
}
我也经常犯这种错误,哈哈