Que signifie le noyau Linux ?
Sous Linux, Core signifie mémoire. Lorsqu'une exception est détectée pendant l'exécution du programme et que le programme se termine anormalement, le système stocke l'état actuel de la mémoire du programme dans un fichier core, appelé core dumped, qui est également un vidage d'informations lorsque le système d'exploitation détecte une exception ; le processus actuel, il utilisera un signal. Notifier le processus cible des informations d'erreur correspondantes. Les signaux courants incluent SIGSEGV, SIGBUS, etc. Par défaut, le processus dispose d'un mécanisme de traitement correspondant lorsqu'il reçoit le signal correspondant.
L'environnement d'exploitation de ce tutoriel : système linux7.3, ordinateur Dell G3.
Lors du développement sous Linux, nous entendons souvent les programmeurs dire que le cœur de mon programme a chuté. De tels problèmes surviennent généralement en raison de bugs de bas niveau tels qu'un accès mémoire hors limites, l'utilisation de pointeurs nuls, un débordement de pile, etc. . Si le programme se ferme ou se termine anormalement pendant l'exécution, les fichiers core seront générés lorsque ces conditions seront remplies.
Pourquoi Coredump se produit-il
Core signifie mémoire. Ce mot vient du matériau utilisé il y a longtemps pour fabriquer de la mémoire et a été utilisé jusqu'à présent lorsqu'une anomalie est détectée lors du fonctionnement du programme et du programme. Le programme se termine anormalement, le système stocke l'état actuel de la mémoire du programme dans un fichier core, appelé core dumped, également connu sous le nom de Information dump Lorsque le système d'exploitation détecte une exception dans le processus en cours, il en informe le processus cible. les informations d'erreur correspondantes via un signal. Les signaux courants incluent SIGSEGV, SIGBUS, etc. Par défaut, le processus dispose d'un mécanisme de traitement correspondant lorsqu'il reçoit le signal correspondant.
Prenons Linux comme exemple. L'action correspond à la méthode de traitement du signal. Les cases rouges sont marquées comme des signaux communs
Avant cela, il est préférable de comprendre la disposition de la mémoire du processus. Les systèmes Unix et Linux seront légèrement différents, l'espace du noyau sera plus petit que celui de Linux, en particulier le noyau et les processus utilisateur adoptent un mode d'espace d'adressage séparé. Voici Linux à titre d'exemple :
Le stockage. emplacement du fichier coredump
Nous savons que dans le système Linux, si le processus plante, le noyau du système capturera les informations de crash du processus, puis écrira les informations coredump du processus dans un fichier. Le nom de fichier par défaut est. cœur. L'emplacement de stockage est dans le même répertoire que le programme exécutable correspondant. Le nom du fichier est core Vous pouvez voir l'emplacement du fichier core via la commande suivante :

Core_pattern format :
%p. PID de transfert du processus vidé
%u (Nombre) UID réel du processus vidé
%G (Nombre) GID réel du processus vidé
%s Nombre de signaux qui ont provoqué le dump
%t Heure du dump, exprimée sous la forme depuis 1970 1 Nombre de secondes depuis le 1er mois 00:00:00 +0000 (UTC)
%H Nom d'hôte (identique au nom de nœud renvoyé par uname(2))
%e Nom de l'exécutable (pas de préfixe de chemin)
%E Oui Le nom de chemin du fichier exécutable, avec des barres obliques ('/') remplacées par des points d'exclamation ('!').
%C Limite souple de ressources de taille de fichier Core pour le processus de crash (depuis Linux 2.6.24)
Le programme suivant peut être utilisé pour démontrer l'utilisation de la syntaxe des tubes dans le fichier /proc/sys/kernel/core_pattern.
#include <sys/stat.h> #include <fcntl.h> #include <limits.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #define BUF_SIZE 1024 int main(int argc, char *argv[]) { int tot, j; ssize_t nread; char buf[BUF_SIZE]; FILE *fp; char cwd[PATH_MAX]; /* 属性的当前工作目录崩溃的过程*/ snprintf(cwd, PATH_MAX, "/proc/%s/cwd", argv[1]); chdir(cwd); /* 将输出写到该目录下的文件"core.info" */ fp = fopen("core.info", "w+"); if (fp == NULL) { exit(EXIT_FAILURE); } fprintf(fp, "argc=%d\n", argc); for (j = 0; j < argc; j++) { fprintf(fp, "argc[%d]=<%s>\n", j, argv[j]); } /* 计算标准输入(核心转储)中的字节数*/ tot = 0; while ((nread = read(STDIN_FILENO, buf, BUF_SIZE)) > 0) { tot += nread; } fprintf(fp, "Total bytes in core dump: %d\n", tot); return 0; }
注意一下: 这里是指在进程当前工作目录的下创建。通常与程序在相同的路径下。但如果程序中调用了chdir函数,则有可能改变了当前工作目录。这时core文件创建在chdir指定的路径下。有好多程序崩溃了,我们却找不到core文件放在什么位置。和chdir函数就有关系。当然程序崩溃了不一定都产生 core文件。
下面通过的命令可以更改coredump文件的存储位置,如下:
echo “|$PWD/core_pattern_pipe_test %p UID=%u GID=%g sig=%s” > /proc/sys/kernel/core_pattern
cat /proc/sys/kernel/core_pattern
查看路径已经变为如下:

下面带大家配置永久的core。只要出现内存访问越界、使用空指针、堆栈溢出等情况,都可以在这个目录下查看。
配置 core
1、首先在根目录下建立一个储存coredump文件的文件夹,命令如下:
mkdir /corefile
2、设置产生coredump文件的大小,命令如下:
ulimit -c unlimited
3、 执行以下两条命令:
echo “1” > /proc/sys/kernel/core_uses_pid //将1写入到该文件里 echo “/corefile/core-%e-%p-%t” > /proc/sys/kernel/core_pattern
将coredump产生的格式制定好写入core_pattern文件,这样当coredump产生时会直接以这种格式存入到根目录下的文件夹corefile中。
4、修改配置文件/etc/profile
vim /etc/profile
添加 ulimit -S -c unlimited > /dev/null 2>&1
执行命令生效该文件

5、 在配置文件/etc/rc.local中最后面添加信息(机器重启时会自动加载该命令):添加命令:
rm -rf /corefile/*
机器重启时清空该文件夹,由于产生的coredump文件很大,若不清空的话时间长了会将硬盘占满;
再执行以下两条命令:
echo “1” > /proc/sys/kernel/core_uses_pid echo “/corefile/core-%e-%p-%t” > /proc/sys/kernel/core_pattern
测试
下面写个例子测试一下是否配置好了corefile文件
#include
编译运行,注意这里需要-g选项编译。

进入前面创建的corefile文件夹:

出现core文件表示完成coredump配置。可以用通过readelf命令进行判断是否是core文件:
Exécutez gdb pour lire le fichier core. La commande est "le programme gdb correspond au fichier coredump". À ce moment, vous entrerez l'invite gdb "(gdb)".
Comme vous pouvez le voir sur la capture d'écran de l'encadré rouge, le programme est terminé à cause du signal 11.
Vous pouvez voir la pile d'appels de la fonction via la commande bt (backtrace) (ou où) ci-dessous :

C'est-à-dire que lorsque le programme s'exécute à la ligne 6 de test.cpp, une erreur de segmentation se produit. La raison est qu'il pointe vers un pointeur nul.
Résumé
Il existe de nombreuses raisons pour le coredump du programme. Voici un résumé, principalement l'accès à la mémoire hors limites, l'utilisation de fonctions non sécurisées pour les threads, l'utilisation de pointeurs nuls, le débordement de pile, etc.
Je tiens à dire ici que lors du débogage de coredump avec gdb, la plupart du temps, vous ne pouvez découvrir la raison intuitive du core qu'à partir du fichier core. Cependant, la raison la plus fondamentale doit généralement être combinée avec le code pour. analyser le contexte d'exécution du processus à ce moment-là afin d'en déduire. Le problème réside dans le code du programme.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Vs Code Système Exigences: Système d'exploitation: Windows 10 et supérieur, MacOS 10.12 et supérieur, processeur de distribution Linux: minimum 1,6 GHz, recommandé 2,0 GHz et au-dessus de la mémoire: minimum 512 Mo, recommandée 4 Go et plus d'espace de stockage: Minimum 250 Mo, recommandée 1 Go et plus d'autres exigences: connexion du réseau stable, xorg / wayland (Linux) recommandé et recommandée et plus

Les raisons de l'installation des extensions de code vs peuvent être: l'instabilité du réseau, les autorisations insuffisantes, les problèmes de compatibilité système, la version de code vs est trop ancienne, un logiciel antivirus ou des interférences de pare-feu. En vérifiant les connexions réseau, les autorisations, les fichiers journaux, la mise à jour vs du code, la désactivation des logiciels de sécurité et le redémarrage du code ou des ordinateurs, vous pouvez progressivement dépanner et résoudre les problèmes.

Bien que le bloc-notes ne puisse pas exécuter directement le code Java, il peut être réalisé en utilisant d'autres outils: à l'aide du compilateur de ligne de commande (Javac) pour générer un fichier bytecode (filename.class). Utilisez l'interpréteur Java (Java) pour interpréter ByteCode, exécuter le code et sortir le résultat.

VS Code est le code Visual Studio Nom complet, qui est un éditeur de code multiplateforme gratuit et open source et un environnement de développement développé par Microsoft. Il prend en charge un large éventail de langages de programmation et fournit une mise en surbrillance de syntaxe, une complétion automatique du code, des extraits de code et des invites intelligentes pour améliorer l'efficacité de développement. Grâce à un écosystème d'extension riche, les utilisateurs peuvent ajouter des extensions à des besoins et des langues spécifiques, tels que les débogueurs, les outils de mise en forme de code et les intégrations GIT. VS Code comprend également un débogueur intuitif qui aide à trouver et à résoudre rapidement les bogues dans votre code.

VS Code est disponible sur Mac. Il a des extensions puissantes, l'intégration GIT, le terminal et le débogueur, et offre également une multitude d'options de configuration. Cependant, pour des projets particulièrement importants ou un développement hautement professionnel, le code vs peut avoir des performances ou des limitations fonctionnelles.

Visual Studio Code (VSCODE) est un éditeur de code Open Source, Open Source et gratuit développé par Microsoft. Il est connu pour son léger, l'évolutivité et le support pour une large gamme de langages de programmation. Pour installer VScode, veuillez visiter le site officiel pour télécharger et exécuter l'installateur. Lorsque vous utilisez VSCODE, vous pouvez créer de nouveaux projets, modifier le code, déboguer le code, naviguer dans les projets, développer VSCODE et gérer les paramètres. VScode est disponible pour Windows, MacOS et Linux, prend en charge plusieurs langages de programmation et fournit diverses extensions via Marketplace. Ses avantages incluent le léger, l'évolutivité, le support linguistique étendu, les fonctionnalités riches et la version

Les principales utilisations de Linux comprennent: 1. Système d'exploitation du serveur, 2. Système intégré, 3. Système d'exploitation de bureau, 4. Environnement de développement et de test. Linux excelle dans ces domaines, offrant des outils de stabilité, de sécurité et de développement efficaces.

Pour afficher l'adresse du référentiel GIT, effectuez les étapes suivantes: 1. Ouvrez la ligne de commande et accédez au répertoire du référentiel; 2. Exécutez la commande "git Remote -v"; 3. Affichez le nom du référentiel dans la sortie et son adresse correspondante.
