无意义的windbg线程输出(符号正确加载)

时间:2013-03-20 15:14:48

标签: java c++ debugging windbg

我有一个项目使用Java来做GUI和C ++来进行计算,通过JNI连接。我在应用程序中遇到了一个僵局,它在3个多小时后就显现出来了。我以为我会使用WinDBG进行调试。所以我将应用程序作为调试对象附加,加载了正确的符号并开始查看调用堆栈。问题是,我得到的调用堆栈似乎与应用程序正在做的不一致。

例如,我有大约10个工作线程,全部由

打开
CreateThread(NULL, 0, &(work), this, 0, NULL);

但是windbg只显示了一个这样的线程。我还有至少两个线程,其相同的调用堆栈如下所示:

wow64cpu!CpupSyscallStub
wow64cpu!Thunk0ArgReloadState
wow64!RunCpuSimulation
wow64!Wow64LdrpInitialize
ntdll!LdrpInitializeProcess
ntdll! ?? ::FNODOBFM::`string'
ntdll!LdrInitializeThunk

那是什么?

然后我有一个线程,其堆栈跟踪由重复的单个函数组成:

myModule!myFunc
myModule!myFunc
myModule!myFunc
myModule!myFunc
myModule!myFunc
myModule!myFunc
myModule!myFunc
myModule!myFunc

myFunc函数不是递归的,并且不会启动自己的线程。堆栈有可能是这样的吗?堆栈跟踪的其余部分在哪里?

在javaw模块中没有可以运行的线程(并且应该至少有一个 - EDT)

如何让调试器正确识别线程并使其显示真正的堆栈跟踪?

另外......是否可以以某种方式标记线程,以便在调试器中识别它们?

编辑更多信息:
出于许可目的,我无法使用Visual Studio WinDBG版本:6.12.0002.633 AMD64
Windows 7,6.1 build 7601,SP1
Java 1.7.0_07

我使用Eclipse CDT并进行优化我只能选择“默认”,“最小化大小”和“最大化速度”。我使用“默认”。我的编译命令如下所示:cl /c /EHs /MD /Zi当我显示反汇编时,它显示模块中函数的汇编代码,而不是原始源代码。但是,它会从源位置打开源文件。

0 个答案:

没有答案