Automatique de traçage de l'exécution du programme
Je voudrais savoir si on peut activer le traçage dans toute application C ou C++.
Par exemple, avec un gcc avec l'option ou d'un petit outil, je vais activer le suivi et soit trace est imprimé sur la console ou exportée vers un fichier.
Car il y a beaucoup de fichiers et de la fonction /classes, je ne veux pas commencer à ajouter la trace des impressions manuellement.
Si ces outils ne sont pas disponibles, à côté de choix est l'utilisation de scripts et d'essayer de les ajouter à la trace de l'impression.
strace
est pas très utile, car il donne principalement les appels système.
si c'est juste pour un environnement de développement vous pouvez compiler tout compiler avec g et exécuter les programmes à l'intérieur de gdb. Cela vous donnera toujours une trace de la pile complète.
Vous pouvez vérifier le C++ interprètes... cint / ch / ...? Pas sûr de ce qu'ils peuvent faire, mais ils sont plus susceptibles de faire ce que n'importe quel compilateur. FWIW, si vous commencez à regarder chaque ligne de trace, vous n'êtes pas loin de l'aide d'un débogueur (sauf si vous avez moins de contrôle).
Ce voulez-vous laisser de trace? Il y a environ un million de réponses différentes, et un compilateur ne peut pas comme par magie en déduire ce que vous voulez tracer. Qui le rend beaucoup plus difficile pour ajouter des traces automatiquement.
Vote pour fermer trop large car il n'est pas clair ce OP veut tracer. Plus précise de la demande: les lignes de source: stackoverflow.com/questions/764382/automate-tracing-in-gdb , les appels de la fonction: stackoverflow.com/questions/311948/... , les lignes et les données: stackoverflow.com/questions/763891/...
Vous pouvez vérifier le C++ interprètes... cint / ch / ...? Pas sûr de ce qu'ils peuvent faire, mais ils sont plus susceptibles de faire ce que n'importe quel compilateur. FWIW, si vous commencez à regarder chaque ligne de trace, vous n'êtes pas loin de l'aide d'un débogueur (sauf si vous avez moins de contrôle).
Ce voulez-vous laisser de trace? Il y a environ un million de réponses différentes, et un compilateur ne peut pas comme par magie en déduire ce que vous voulez tracer. Qui le rend beaucoup plus difficile pour ajouter des traces automatiquement.
Vote pour fermer trop large car il n'est pas clair ce OP veut tracer. Plus précise de la demande: les lignes de source: stackoverflow.com/questions/764382/automate-tracing-in-gdb , les appels de la fonction: stackoverflow.com/questions/311948/... , les lignes et les données: stackoverflow.com/questions/763891/...
OriginalL'auteur hari | 2011-04-28
Vous devez vous connecter pour publier un commentaire.
La trace de la fonction d'entrée/sortie, vous pouvez recompiler votre code avec l'option
-finstrument-fonctions
de sorte que chaque fois qu'une fonction est appelée, un__cyg_profile_func_enter()
fonction est appelée, et__cyg_profile_func_exit()
est appelée lorsque la fonction retourne.Vous pouvez mettre en œuvre ces fonctions pour tracer les adresses sur les fonctions appelées, et leur utilisation nm pour convertir les adresses en noms de fonction.
MODIFIER: etrace tout cela: il fournit le code source de la
__cyg_profile_func_enter()
et__cyg_profile_func_exit()
et les fonctions que d'écrire les adresses d'un tube nommé et Perl et un script Python pour lire les adresses et faire le suivi avec les noms de fonction et de l'indentation.OriginalL'auteur philant
Pour GCC, vous pouvez construire avec profilage soutien, et puis exécutez le programme. Qui va créer le
gmon.out
fichier, qui à son tour contient une (sorte de) trace des fonctions exécutées par le programme.Qui vient même pas près de l'utilitaire ou de la facilité d'utilisation de la main-trace écrite printf()s, si.
OriginalL'auteur unwind
Puisque vous posiez des questions sur gcc. Il a l'option
-finstrument-functions
qui permet d'exécuter du code arbitraire avant et après les appels de fonctions.OriginalL'auteur Jens Gustedt
UTILISATION Log4cxx.
Cela permettra d'enregistrer les détails une fois que vous spécifiez le type de fichier,nom de fichier et la taille du fichier dans leur fichier de configuration.
Suivez les étapes à suivre pour exécuter le programme d'exemple.
OriginalL'auteur karthik
Si vous ne voulez pas modifier tous vos
printf()
appels, je vous suggère de faire quelque chose le long de ces lignes dans un fichier d'en-tête, et l'inclure dans tous vos fichiers de code:Ce qui est cool c'est que vous pouvez également remplacer printf avec une fonction d'enregistrement de votre propre:
Notez que j'utilise ici une belle macro astuce: variadic macro.
OriginalL'auteur Gui13
Ce sujet ltrace?
OriginalL'auteur karlphillip
Utilisation Lttng, mais il exige le code source de l'instrumentation si vous voulez tracer sur les binaires systemtap basé sur linux outil pourrait être utile. Aussi Aspect C++ pourraient être utilisés étaient u besoin de code et de précompiler avec aspect compilateur
OriginalL'auteur Step
Je sais que vous ne voulez pas ajouter quelque chose pour chaque fonction, mais si c'est aussi simple que de changer {{_ce que vous conquérir? Un peu de script peut faire cela automatiquement - ping-moi si vous avez besoin que. Si cela fonctionne, alors regardez ce petit utilitaire que j'ai mis en place - un seul fichier d'en-tête à inclure et puis, vous obtenez nice portable traçage
https://github.com/goblinhack/callstack
par exemple:
void my_function (void)
{_
//rest of code
}
Appel CALLSTACK_DUMP() à tout moment pour vider le courant de la pile.
Il suffit de ne
OriginalL'auteur Neil McGill