2008-12-11 10 views
0

J'ai besoin de détecter si mon Makefile fonctionne sous valgrind (indirectement, en utilisant valgrind --trace-children = yes), je sais comment le faire depuis C mais je n'ai pas trouvé le moyen de le faire depuis un script,Comment détecter s'il est exécuté sous valgrind dans un fichier make ou un script shell?

Les réponses précédentes ne fonctionnent que sous Linux. Pour Mac OS X, je vais faire un grep pour VALGRIND_STARTUP_PWD dans l'environnement, sauf si quelqu'un a une meilleure idée.

Répondre

3

à partir d'une coque:

grep -q '/valgrind' /proc/$$/maps && echo "valgrindage"

Ceci détermine si les bibliothèques préchargé de valgrind sont présents dans la carte d'adresse du processus. C'est raisonnablement efficace, mais si vous avez une bibliothèque non-valgrind qui partage le moniker '/ valgrind' alors vous obtiendrez un faux positif (peu probable).

[J'ai changé le modèle de grep de vg_preload à/valgrind, comme les tests sur Debian/Ubuntu a révélé que le nom de la bibliothèque était différent, alors qu'un match de répertoire de valgrind est le plus susceptible de réussir.]

+0

Neat. Savez-vous si le nom a changé? Il y a des entrées vgpreload mais pas de vg_preload sur ma machine. –

+0

Ceci venait de la version 3.3.1 de valgrind. Il y a de fortes chances que le nom de la bibliothèque ait changé entre les versions. vous pourriez être en mesure de sortir avec un '/ valgrind /' pour le grep, pourvu que valgrind soit installé dans quelque chose comme/usr/local/lib/valgrind/... – Petesh

+0

Je viens juste de lancer ma boîte ubuntu et elle m'a dit ' vgpreload 'sans le trait de soulignement. Cela peut être une chose ubuntu qui a causé le changement de nom. Ma réponse originale était basée sur une construction à l'intérieur d'un environnement Linux From Scratch – Petesh