2010-08-20 8 views
1

J'essaie d'obtenir les piles d'appels conduisant à une fonction, func, chaque fois qu'il est invoqué dans mon exécutable, et cela ne me dérange pas si la façon d'obtenir ceci est lente ou inefficace, tant qu'il est automatisé (parce que 'func' est touché des milliers de fois). J'ai accès à dbx, donc je pensais que je pouvais faire quelque chose comme ceci:rediriger la sortie de 'where' dans dbx

 (dbx) { when in func { where -q; }; } | awk '{ print }' > out.txt

mais je ne vois pas les piles appel sortie sur la console ou dans le fichier (je l'ai confirmé que la fonction est d'être frappé). La documentation de dbx indique que 'where' est une commande non redirectable, mais je me demande s'il y a des solutions de contournement pour cela?

Répondre

1

Certaines commandes dbx doivent accepter des arguments ayant des métacaractères shell. Par exemple: impression (un < 34)

Pour les commandes comme ça, vous pouvez mettre la redirection avant la commande: (DBX)>/print tmp/t (un < 34)

« redirection d'aide "sur la ligne de commande dbx va l'expliquer.

Dans votre exemple, la commande 'where' accepte les noms de fonction comme arguments, qui (en C++) peut utiliser < et> caractères. Donc, il tombe dans cette catégorie spéciale.

Malheureusement, il n'y a aucun moyen d'utiliser une opération de tuyau avant la commande. Vous aurez donc besoin d'utiliser un schéma différent impliquant des fichiers temporaires pour obtenir ce que vous voulez. Il y a des exemples dans le sujet d'aide que j'ai mentionné ci-dessus.

Questions connexes