最近在做一个项目。大概是这样的:在WInDbg下,对目标进程设置一些断点,在断点trigger的时候自动执行制定的一些命令(可以为build-in 命令,或者是一些扩展的命令),执行完之后不停下来继续运行。原理如下: bp Debuggee2!CMyTester::SubTestingProc "r $t0=@$t0+1;r $t0;g"
有了这样的功能,我们写一些扩展的命令,我们就可以在不重新编译程序的情况下,改变目标进程运行逻辑或者记录目标进程的运行情况(比如纪录局部变量或者全局变量)等等。进一步可以用它来做一些自动化的测试功能。
一开始进展很顺利。
最近碰到的问题感觉让我很沮丧。特地来此求教各位高人和老师
问题描述:
如果目标断点被多个线程同时调用,这样WinDbg会漏掉一些断点。
测试程序代码:
void CMyTester::TestingProc1()
{
while (1) {
SubTestingProc(m_nCounter1);
if (m_nCounter1>=0x100) {
break;
}
m_nCounter1 += 1;
}
}
void __cdecl WorkingThreadProc1(void *pArg)
{
UINT nIndex = (UINT)pArg;
CMyTester tester(nIndex);
tester.TestingProc1();
}
void CDebuggee2Dlg::CreateNewThreads(int nOption)
{
for (int i=0; i<3; ++i) {
_beginthread(WorkingThreadProc1, 0, (PVOID)nOption);
}
}
|