L'éditeur php Xiaoxin vous présentera comment charger les symboles de débogage pour le processus en cours. Dans le processus de développement logiciel, le débogage est un maillon très important. Lorsque nous rencontrons un problème avec un processus en cours d'exécution, nous devons charger des symboles de débogage pour le débogage. Les symboles de débogage contiennent des informations sur les symboles du code, ce qui nous permet de localiser plus précisément le problème lors du débogage. Dans cet article, nous expliquerons en détail comment charger les symboles de débogage pour le processus en cours afin de vous aider à mieux déboguer.
J'ai une application C qui s'exécute sur de nombreuses machines et parfois une instance aura des problèmes et se comportera étrangement. Malheureusement, cela n’arrive presque jamais. Ces instances de produits sont compilées avec de lourdes optimisations (-march=XXX -Ofast
) et ne contiennent aucun symbole de débogage, je ne peux donc pas facilement attacher un débogueur pour analyser leur statut.
Mais je pense qu'il devrait être possible de le charger dans gdb en utilisant les mêmes drapeaux plus -g3
再次编译应用程序,然后我可以使用 symbol-file application_executable_with_debug_symbols
. Cependant, si je fais cela, le point d'arrêt ne se déclenche jamais.
Existe-t-il un autre moyen d'attacher un débogueur à une application en cours d'exécution et de charger des symboles de débogage ? Ou est-ce que je fais quelque chose de mal (évidemment) ?
Merci
La meilleure pratique consiste à créer l'application avec des symboles de débogage, à conserver le binaire généré pour le débogage, mais à exécuter strip -g app.debug -o app.release
et à exécuter le binaire supprimé en production.
Lorsque vous trouvez une instance qui se comporte étrangement, vous pouvez copier la version de débogage complète sur la machine cible et l'exécuter gdb -ex 'attach $PID' app.debug
. Voila : vous disposez de symboles de débogage complets.
La raison la plus probable pour laquelle la compilation à nouveau de l'application ne fonctionne pas est que vous obtenez un nouveau binaire avec des symboles différents (comparez nm app.debug
与 nm app.release
),以及最可能的原因 (如果使用 GCC)是您省略了一些用于构建 app.release
的优化标志,或者您使用了略有不同的源 - 您必须使用完全相同的标志(并添加-g
) et exactement la même source pour que la méthode réussisse.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!