1

Savez-vous comment on peut faire pour exporter dans un fichier de log la callstack dans le code d'un processus ?

Un peut comme ici : https://eli.thegreenplace.net/2015/programmatic-access-to-the-call-stack-in-c/
mais pour windows sous visual studio ?
avatar

2

Est-ce qu'il faut que le fichier log soit lisible directement sans outils, ou ça peut être un fichier binaire que tu analyses plus tard ?
C'est uniquement pour quand l'appli plante, ou tu en as besoin même en fonctionnement normal ?
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

3

ça peut être un fichier binaire.

C'est pour du fonctionnement normal
avatar

4

Je n'ai jamais testé, mais on peut créer un fichier dump d'un processus Windows (soit en appelant une API, soit en utilisant un outil externe, soit directement via le gestionnaire de tâches dans les versions récentes de Windows) :
https://stackoverflow.com/a/34252445
ProcDump - Windows Sysinternalsdocs.microsoft.comThis command-line utility is aimed at capturing process dumps of otherwise difficult to isolate and reproduce CPU spikes.

What is the "create dump file" feature in Task Manager?Super UserRecently I came to find about a feature (option) by right clicking on process in Task Manager on Windows 10: I want to know what does the feature stand for and what can I do with it?


Ensuite on doit pouvoir charger ce fichier dans un débogueur pour récupérer la call stack et le reste (avec davantage de détails si on a aussi le fichier avec les symboles de debug du processus, bien sûr).
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

5

Effectivement, ça a l'aire de faire l'affaire smile
Merci ! smile
avatar

6

SCPCD (./1) :
Savez-vous comment on peut faire pour exporter dans un fichier de log la callstack dans le code d'un processus ?

Un peut comme ici : https://eli.thegreenplace.net/2015/programmatic-access-to-the-call-stack-in-c/
mais pour windows sous visual studio ?
Ca va dépendre du compilateur et de l'OS, et meme en sachant c'est rarement simple.

Sous unix/linux tu as "backtrace (3)": https://linux.die.net/man/3/backtrace

voila le genre de code qu'il faut pondre pour en faire quelque chose d'utile:

GitHub - Godzil/eCrash: Embedded Crash HandlerGitHubEmbedded Crash Handler. Contribute to Godzil/eCrash development by creating an account on GitHub.


(pas mon code, j'ai juste ressuscité un vieux projet ici)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

7

j'avais précisé pour windows/visualstudio tongue

Néanmoins, ça peut toujours servir, même si ça me semble bien compliqué par rapport à l'exemple dans mon lien (après ça dépend peut être du contexte d'utilisation). smile



Sinon, pour windows, avec la solution de Zero, en 3 appels de fonctions et ça fait le job :
HANDLE hFile; hFile = CreateFile(TEXT("stack_dump.dmp"), GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) return; MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, (MINIDUMP_TYPE)(MiniDumpWithFullMemoryInfo | MiniDumpWithIndirectlyReferencedMemory | MiniDumpWithFullMemory | MiniDumpWithHandleData | MiniDumpWithProcessThreadData | MiniDumpWithThreadInfo | MiniDumpWithUnloadedModules), NULL, NULL, NULL); CloseHandle(hFile); Après y a plus qu'a ouvrir le fichier dans VisualStudio ou tout autre debugger windows qui supporte le fichier et y a toutes les infos que l'on souhaite wink.
avatar

8

Oui ca partais plus simple parceque le code est masqué par la lib unwind, alors que la tout est fait a la main (et ce code n'est pas capable de récupérer les noms de fonctions automatiquement, ce que unwind fait d'une maniere ou d'une autre et c'est encore plus compliqué.

C'était juste un exemple, et j'ai manqué le fait que tu voulais windows only smile

Récupérer les adresses est "simple" en faire quelque chose est un poil plus complexe et est spécifique au compilateur et OS.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.