【发布时间】:2017-11-06 13:09:11
【问题描述】:
当我们有一个常规断点时,调试器会在那里中断,我们会看到调用堆栈。但是如果我们使用 CTRL + Break 来中断执行呢?我希望当前正在运行的线程会破坏它原来的位置,但我看到的通常是以下内容:
# ChildEBP RetAddr
00 02b7fdc4 7762f216 ntdll!DbgBreakPoint
01 02b7fdf4 76c0336a ntdll!DbgUiRemoteBreakin+0x3c
02 02b7fe00 775c9902 kernel32!BaseThreadInitThunk+0xe
03 02b7fe40 775c98d5 ntdll!__RtlUserThreadStart+0x70
04 02b7fe58 00000000 ntdll!_RtlUserThreadStart+0x1b
*** WARNING: Unable to verify checksum for ThreadDemo.exe
但是我怎样才能得到被中断的当前线程的实际代码呢?
我正在运行一个长循环,如下所示,这需要一些时间,我希望它会在那里中断。
void Bank::Deposit(void* param)
{
Bank * bank = (Bank *)param;
char *who = (char*) bank->bankName;
int i;
printf("%s: begin deposite\n", who);
for (i = 0; i < 1000000000; i++) {
bank->balance = bank->balance + 1;
}
printf("%s: done\n", who);
return;
}
在这种情况下,当它中断时,另一个线程确实会在此函数中中断,但这是一个简单的演示。当我有很多线程时,如何在真实的 Windows 应用程序中知道应用程序真正停止的位置(以及它在做什么)?
【问题讨论】:
标签: c++ multithreading debugging windows-7 windbg