我们首先做个实验,来看windbg是否支持多进程调试, 我首先编写一个MFC工程命名为mutiprocess,在这个工程中简单添加一个按钮,作用是启动一个线程。代码如下:
// TODO: Add your control notification handler code here
STARTUPINFO StartupInfo;
PROCESS_INFORMATION pi; //Define as global variable, the pi must be transmited to DbgMainLoop(DWORD)
memset ( &StartupInfo , NULL , sizeof ( STARTUPINFO ) ) ;
memset ( &pi , NULL , sizeof ( PROCESS_INFORMATION ) ) ;
StartupInfo.cb = sizeof ( STARTUPINFO ) ;
//create the Debuggee process
CreateProcess(
0,
"D:\\C++\\debugviewTest\\Debug\\debugviewTest.exe",
(LPSECURITY_ATTRIBUTES) 0L,
(LPSECURITY_ATTRIBUTES) 0L,
TRUE,
NORMAL_PRIORITY_CLASS,
(LPVOID) 0L,
(LPTSTR) 0L,
&StartupInfo, &pi ) ;
然后进行编译,通过后启动windbg,选择“Open Executable”,选择编译成功的mutiprocess.exe,当进入到初始化断点后直接键入‘g’。接下来mutiprocess.exe启动。当点
对画框中的button后将启动进程“debugviewTest.exe”,debugviewTest.exe是个被调试进程其中的功能包括breakpoint,trace,Create thread, remote break point。然后尝试点击break point, trace, create thread等按钮,发现在windbg没有任何显示。
接下来在mutiprocess的按钮上添加一行代码“DebugBreak();”,手动添加一个断点,然后重复以上测试,但debugviewTest.exe启动后,mutiprocess被中断到调试器,此时尝试点击break point,trace,create thread等按钮,仍然发现在windbg中没有任何显示。
于是可以得出windbg不支持多进程的调试。但从windbg的调试结构上看,windbg完全可以支持多进程的调试,但为什么没有实现这个功能呢?我一直思考但没有得出结论,但我觉得多进程调试还是有其方便之处,下篇中我将介绍如何能够实现多进程调试以及其优点。