2011-03-23 6 views
1

J'essaye actuellement de déboguer mon Crash-Handler, c'est un exécutable externe qui est appelé quand mon programme trouve une exception structurée non gérée. J'ai recompilé l'exécutable crash-handler, et quand j'ai testé, j'ai reçu un message: "Programme trop grand pour tenir dans la mémoire". Après avoir cherché un peu, j'ai découvert que cela était provoqué par l'appel CreateProcess dans mon filtre d'exception non gérée. J'ai trouvé this post qui dit que ce message d'erreur indique que l'exécutable est corrompu, cependant si j'appelle le CrashHandler.exe de la ligne de commande, je n'obtiens pas une telle erreur.CreateProcess(): "Programme trop grand pour tenir dans la mémoire"

Autres informations:

  • J'ai essayé la reconstruction de mon application et le crash-gestionnaire plusieurs fois dans les deux débogage et mode de déclenchement.
  • J'ai essayé de donner au thread courant 2 ordres de grandeur plus d'espace de pile.
  • J'ai testé le même CrashHandler.exe dans une autre application qui l'utilisait déjà, et il n'y avait aucun problème.
  • J'ai essayé d'utiliser une version antérieure de l'exe qui fonctionnait avant, mais avec le même résultat.
  • Redémarrage du système.

Mon appel à CreateProcess:

//Fire off the Handler 
//HandlerArgs = "CrashHandler.exe arg1 arg2 arg3 etc..." 
if(CreateProcess(NULL, HandlerArgs, NULL, NULL, TRUE, CREATE_PRESERVE_CODE_AUTHZ_LEVEL | CREATE_SUSPENDED, 
       NULL, NULL, &StartupInfo, &NewProcessHandle)) 

Répondre

2

Transforme que l'un de mes crochets post-construction copiait sur l'exe à partir du référentiel de contrôle de code source et le fichier que j'avais dans le référentiel de contrôle de code source a été en fait le pdb. Pendant le test, je copiais directement dans mon dossier en cours d'exécution, puis le crochet copiait à nouveau l'exe "corrompu".

Questions connexes