Я использую UMDH (x64) для проверки утечки памяти. Мой код не оптимизирован ни FPO, ни использование специализированных распределителей. Он использует только «новый» оператор.UMDH, не предоставляющий стек вызовов
«Создание базы данных трассировки стека пользователя» включено в Gflags (x64) для тестируемого изображения.
Я отследил свое приложение с использованием UMDH как в негерметичном корпусе, так и в герметичном корпусе и получил журналы в обоих случаях.
И сравнили журналы с UMDH. Он выбрал правильный pdb, как видно из его строк комментариев в верхней части.
Проблема:
стек Вызов не показывает стек моего кода. Он просто отслеживает общие имена функций окон. Я пробовал обе версии отладки и выпуска в x64. Я что-то упустил?
код и дифф след получается ниже:
// code:
#include <iostream>
using namespace std;
void myFunc()
{
int k;
cin >> k;
int* ii = new int[1998];
if (k == 0) delete[] ii;
}
int main()
{
myFunc();
return 0;
}
// stack trace obtained:
+ 390 ( 390 - 0) 1 allocs BackTraceAC905E8D
+ 1 ( 1 - 0) BackTraceAC905E8D allocations
ntdll!RtlpCallInterceptRoutine+0000003F
ntdll!RtlpAllocateHeapInternal+0000069F
ntdll!TppWorkerThread+00000ADB
KERNEL32!BaseThreadInitThunk+00000022
ntdll!RtlUserThreadStart+00000034
.....
.....
...
Качество символ не очень хорошо, он может видеть только экспортируемые функции, убедитесь, что настройки сервера символов с [переменной окружения _NT_SYMBOL_PATH] (HTTPS : //msdn.microsoft.com/en-us/library/windows/hardware/ff553431 (v = vs.85) .aspx). TppWorkerThread - это точка входа для потока threadpool, а не вашего кода, [обратите внимание на Windows 10] (http://stackoverflow.com/a/34826385/17034). –
спасибо, что сработало. – object