Sous Linux, le core est une image mémoire avec des informations de débogage ajoutées Lorsqu'un programme se termine ou se termine anormalement sous Linux, nous utiliserons le fichier core pour l'analyse, qui contient la mémoire, les registres, le pointeur de pile, etc. en cours d'exécution. Les informations, au format ELF, peuvent être comprises comme le transfert de l'état actuel du programme dans un fichier.
L'environnement d'exploitation de ce tutoriel : système linux5.9.8, ordinateur Dell G3.
Qu'est-ce que le core sous Linux ?
Explication détaillée de la façon d'utiliser les fichiers de base sous Linux
Parfois, le programme se ferme anormalement sans aucun journal. À ce stade, vous pouvez utiliser le fichier de code pour l'analyse. Il enregistrera la mémoire, les registres, le pointeur de pile et autres. informations sur le programme en cours d'exécution
Fichier Core :
Habituellement, lorsqu'un programme se termine ou se termine anormalement sous Linux, nous utiliserons le fichier core pour l'analyse, qui contient la mémoire, les registres, le pointeur de pile et d'autres informations lorsque le programme est en cours d'exécution. Le format est ELF, qui peut être compris comme un programme. L'état actuel du travail est déversé dans un fichier. En analysant ce fichier avec un outil, nous pouvons localiser l'appel de pile correspondant et d'autres informations lorsque le programme se termine anormalement ou se termine. pour aider à résoudre le problème.
Utiliser le débogage du fichier principal
Méthode de génération
Afficher l'état du fichier principal actuel
$ ulimit -a ... -c: core file size (blocks) 0 # 关闭状态 ...
Activer le commutateur de génération
ulimit -c unlimited ulimit -a ... -c: core file size (blocks) unlimited ...
Limiter la taille du fichier principal en blocs, généralement 1 bloc = 512 octets, si le paramètre est trop petit, le fichier peut ne pas être généré
$ ulimit -c 1024 $ ulimit -a ... -c: core file size (blocks) 1024 ...
Désactivez le commutateur de génération
ulimit -c 0 ulimit -a ... -c: core file size (blocks) 0 ...
L'opération ci-dessus sur le fichier principal ne prend effet que pour l'heure actuelle. Si elle doit prendre effet de manière permanente, le l'opération correspondante doit être écrite dans /etc/profile
Chemin de génération
Le fichier core est généré par défaut dans le répertoire de travail du programme. Vous devez vous assurer qu'il y a suffisamment d'espace. et l'autorisation d'écriture pour le répertoire correspondant
echo /MyCoreDumpDir/core.%e.%p > /proc/sys/kernel/core_pattern
La liste de paramètres utilisée pour nommer
%p - insert pid into filename # 添加 pid %u - insert current uid into filename # 添加当前 uid %g - insert current gid into filename # 添加当前 gid %s - insert signal that caused the coredump into the filename # 添加导致产生 core 的信号 %t - insert UNIX time that the coredump occurred into filename # 添加 core 文件生成时的 unix 时间 %h - insert hostname where the coredump happened into filename # 添加主机名 %e - insert coredumping executable name into filename # 添加命令名
/proc/ Si la valeur du fichier sys/kernel/core_uses_pid est 1, peu importe le moment où %p est configuré, le fichier core finalement généré sera ajoutez pid
Méthode de débogage
Vous pouvez utiliser gdb pour déboguer le fichier principal, et vous devez l'apporter lors de la compilation de l'option -g
$ gdb a.out ... (gdb) core-file core ... (gdb) bt ...
Si vous devez déboguer le fichier principal généré par le périphérique intégré sur le PC , vous devez sélectionner l'outil gdb de la plate-forme correspondante et définir l'emplacement du fichier de symboles après avoir entré gdb
$ xxx-xxx-gdb a.out ... (gdb) solib-search-path xxx.so:xxx.so ... (gdb) core-file core ... (gdb) bt ...
Recommandations associées : "Tutoriel vidéo Linux 》
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!