J'essaye d'employer stap
pour juste imprimer toutes les fonctions qu'un programme appelle. Je l'ai fait quelques recherches en ligne et a trouvé ce script (appelé para-callgraph.stp
):Comment éviter une erreur "Seuil de dépassement de la sonde dépassé" lors de l'utilisation de la touche système?
#! /usr/bin/env stap
function trace(entry_p, extra) {
printf("%s%s%s %s\n",
thread_indent (entry_p),
(entry_p>0?"->":"<-"),
ppfunc(),
extra)
}
probe $1.call { trace(1, $$parms) }
probe $1.return { trace(-1, $$return) }
qui est destiné à être exécuté comme ceci:
sudo stap para-callgraph.stp 'process.function("*")' -c `pwd`/my-program
Maintenant, quand je lance, je INTRODUISE un problème. Tout fonctionne très bien au début, mais bientôt systemtap
imprime ce à stderr, et les sorties:
ERROR: probe overhead exceeded threshold
WARNING: Number of errors: 1, skipped probes: 0
WARNING: There were 62469 transport failures.
WARNING: /usr/bin/staprun exited with status: 1
Pass 5: run failed. [man error::pass5]
Tip: /usr/share/doc/systemtap/README.Debian should help you get started.
Faire des recherches online me révélé qu'une heuristique stap
est déclenchée et me couper, et que je pouvais éteindre en ajoutant deux indicateurs -g
et --suppress-time-limits
. (Cette suggestion est soutenue par man stap
sur mon système.) Cependant, cette solution ne fonctionne tout simplement pas et la commande:
sudo stap -g --suppress-time-limits para-callgraph.stp 'process.function("*")' -c `pwd`/core-cpu1
affiche un message d'erreur très similaire, et les sorties:
ERROR: probe overhead exceeded threshold
WARNING: Number of errors: 1, skipped probes: 0
WARNING: There were 67287 transport failures.
WARNING: /usr/bin/staprun exited with status: 1
Pass 5: run failed. [man error::pass5]
Tip: /usr/share/doc/systemtap/README.Debian should help you get started.
Pourquoi ce drapeau n'est-il pas une solution appropriée à mon problème? Et ce problème peut-il être résolu d'une autre manière, ou est-ce que systemtap n'est tout simplement pas approprié pour ce type de cas d'utilisation?
Si cela est important, je l'utilise sur une machine virtuelle Ubuntu 32 bits.
N.B. Je suis plus intéressé par pourquoi SystemTap échoue ici, pas d'autres façons d'accomplir la même chose en utilisant d'autres logiciels. (En effet, il se trouve mon cas d'utilisation, le code ci-dessus était un abus de systemtap.)
limites --suppress temps-doit avoir travaillé à la désactivation du mécanisme de prévention de surcharge. Pourriez-vous transmettre un rapport de bogue plus complet à la liste de diffusion (y compris la version de systemtap, et une idée de la nature de votre programme core-cpu1)? – fche