J'ai profilé une application en utilisant perf
, et je suis confus pourquoi les noms des fonctions sont si mutilés dans le rapport. Par exemple, voici la sortie de perf report
:noms de fonction de rapport de perfusion et caractères supplémentaires
# Overhead Command Shared Object
# ........ ........... ................. .................................................................................................................................................................................................
#
38.98% hello_sp_tp libc-2.19.so [.] __memcpy_sse2_unaligned
|
--- __memcpy_sse2_unaligned
|
|--21.70%-- _ZN5nupic10algorithms6Cells46CStateaSERKS2_.local.1629
|
--17.28%-- _ZN5nupic10algorithms6Cells46Cells420updateInferenceStateERKSt6vectorIjSaIjEE
_ZN5nupic10algorithms6Cells46Cells47computeEPfS3_bb
Par exemple, je reconnais le nom nupic.algorithms.Cells4.updateInferenceState()
, mais je ne suis pas sûr de ce que tous les autres personnages que rembourrer les noms signifient.
Qu'est-ce que _ZN5
? Qu'est-ce que IjSaIjEE
à la fin de ce nom de fonction? Qu'est-ce que cela signifie? D'où viennent-ils?
Oui, j'étais confus par cela parce que j'appris de l'homme que 'la page perf --demangle' est réglé par défaut, je voyais encore le nom mangling. Y at-il des options que je dois définir pour GCC pour faciliter le démantèlement de nom? – mateja
@mateja Il n'y a rien à faire au niveau du GCC. Le démanglement est fait par perf. Je ne vois pas de raison visible directe pour laquelle cela pourrait dépendre de l'arche mais j'ai vu un bug démêlant sur ARM64. Si vous voulez vraiment démêler sans réparer perf, vous pouvez écrire un script pour post-traiter le rapport, même si ce n'est pas très pratique. Le script pourrait appeler 'C++ filt' qui est une commande capable de traduire, par exemple' C++ filt_ZN5nupic10algorithms6Cells46Cells47computeEPfS3_bb' donnera 'nupic :: algorithms :: Cells4 :: Cells4 :: compute (float *, float *, booléen , booléen) – amigadev