java — бессмысленный вывод потока 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 драм64
Windows 7, 6.1 сборка 7601, SP1
Java 1.7.0_07

Я использую Eclipse CDT и для оптимизации могу выбрать только «По умолчанию», «Минимизировать размер» и «Максимизировать скорость». Я использую «По умолчанию». Моя команда компиляции выглядит так: cl /c /EHs /MD /Zi Когда я отображаю разборку, он показывает код сборки для функций в модуле, а не исходный код. Тем не менее, он открывает исходные файлы из исходного местоположения.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]