2016-10-25 4 views
0

J'utilise UMDH (x64) pour tester les fuites de mémoire. Mon code n'est ni optimisé pour FPO ni utilisant des allocateurs personnalisés. Il utilise juste "nouveau" opérateur. «Créer une base de données de trace de pile en mode utilisateur» est activé dans les Gflags (x64) pour l'image en cours de test.UMDH ne donne pas de pile d'appels

J'ai suivi mon application en utilisant UMDH à la fois dans un cas non fuites et un cas qui fuit et obtenu les journaux dans les deux cas.

Et comparé les journaux avec UMDH. Il a choisi le bon pdb comme évident de ses lignes de commentaires dans le haut.

Problème:

La pile d'appels ne montre pas la pile de mon code. Il ne fait que suivre les noms génériques des fonctions Windows. J'ai essayé avec les deux versions de débogage et de publication en x64. Ai-je raté quelque chose?

Le code trace et diff obtenus sont ci-dessous:

// 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 
..... 
..... 
... 
+1

La qualité de symbole est pas très bon, il ne peut voir les fonctions exportées, assurez-vous de configurer le serveur de symboles avec le [environnement _NT_SYMBOL_PATH variable] (https : //msdn.microsoft.com/en-us/library/windows/hardware/ff553431 (v = vs.85) .aspx). TppWorkerThread est l'entrypoint pour un thread threadpool, pas votre code, [attention à Windows 10] (http://stackoverflow.com/a/34826385/17034). –

+0

merci qui a fonctionné. – object

Répondre

1

Comme décrit dans Using UMDH to Find a User-Mode Memory Leak (MSDN), vous devez définir la variable d'environnement _NT_SYMBOL_PATH avant d'utiliser UMDH.

Si vous exécutez la ligne de commande, utilisez

set _NT_SYMBOL_PATH=c:\mysymbols;srv*c:\mycache*https://msdl.microsoft.com/download/symbols