Was bedeutet Linux-Core?

Apr 21, 2023 pm 07:14 PM
linux

In Linux bedeutet Core Speicher. Wenn während der Ausführung des Programms eine Ausnahme erkannt wird und das Programm abnormal beendet wird, speichert das System den aktuellen Speicherstatus des Programms in einer Kerndatei, die als „Core Dump“ bezeichnet wird. Dabei handelt es sich auch um einen Informationsspeicherauszug, wenn das Betriebssystem eine Ausnahme erkennt Der aktuelle Prozess verwendet ein Signal, um den Zielprozess über die entsprechenden Fehlerinformationen zu informieren. Zu den gängigen Signalen gehören SIGSEGV, SIGBUS usw. Standardmäßig verfügt der Prozess über einen entsprechenden Verarbeitungsmechanismus, wenn er das entsprechende Signal empfängt.

Was bedeutet Linux-Core?

Die Betriebsumgebung dieses Tutorials: Linux7.3-System, Dell G3-Computer.

Bei der Entwicklung unter Linux hören wir oft, dass Programmierer sagen, dass der Kern meines Programms ausgefallen ist. Solche Probleme treten normalerweise aufgrund von Fehlern auf niedriger Ebene auf, wie z. B. Speicherzugriff außerhalb der Grenzen, Verwendung von Nullzeigern, Stapelüberlauf usw . Wenn das Programm während der Ausführung beendet wird oder abnormal beendet wird, werden Kerndateien generiert, wenn diese Bedingungen erfüllt sind.

Warum kommt es zu Coredump?

Core bedeutet Speicher. Dieses Wort stammt aus dem Material, das vor langer Zeit zur Speichererstellung verwendet wurde, und wird bis heute verwendet, wenn während der Ausführung des Programms eine Anomalie festgestellt wird Wenn das Programm abnormal beendet wird, speichert das System den aktuellen Speicherstatus des Programms in einer Kerndatei, die als „Core Dump“ bezeichnet wird und auch als „Information Dump“ bezeichnet wird. Wenn das Betriebssystem eine Ausnahme im aktuellen Prozess erkennt, benachrichtigt es den Zielprozess Die entsprechenden Fehlerinformationen werden über ein Signal übermittelt. Zu den gängigen Signalen gehören SIGSEGV, SIGBUS usw. Standardmäßig verfügt der Prozess über einen entsprechenden Verarbeitungsmechanismus, wenn er das entsprechende Signal empfängt.
Nehmen Sie Linux als Beispiel. Die roten Kästchen sind als allgemeine Signale markiert. Zuvor ist es am besten, das Speicherlayout des Prozesses zu verstehen Unix- und Linux-Systeme werden etwas anders sein, der Kernel-Speicherplatz wird kleiner sein als bei Linux, insbesondere der Kernel- und Benutzerprozesse verwenden einen separaten Adressraummodus:

Was bedeutet Linux-Core?

Der Speicher Speicherort der Coredump-Datei

Was bedeutet Linux-Core?Wir wissen, dass im Linux-System bei einem Prozessabsturz der Systemkern die Prozessabsturzinformationen erfasst und dann die Coredump-Informationen des Prozesses in eine Datei schreibt. Der Standarddateiname lautet Kern. Der Speicherort befindet sich im selben Verzeichnis wie das entsprechende ausführbare Programm. Sie können den Speicherort der Kerndatei über den folgenden Befehl anzeigen:


Core_pattern-Format:
%u (Zahl) Tatsächliche UID des gedumpten Prozesses Was bedeutet Linux-Core?%G (Zahl) Tatsächliche GID des gedumpten Prozesses
%s Anzahl der Signale, die den Dump verursacht haben

%t Zeit des Dumps, ausgedrückt als seit 1970 Anzahl der Sekunden seit dem 1. Monat 00:00:00 +0000 (UTC)
%H Hostname (identisch mit dem von uname(2) zurückgegebenen Knotennamen)

%e Name der ausführbaren Datei (kein Pfadpräfix)

%E Ja Der Pfadname von die ausführbare Datei, wobei Schrägstriche ('/') durch Ausrufezeichen ('!') ersetzt werden.
%C Weiche Ressourcenbeschränkung der Kerndateigröße für den Absturzprozess (seit Linux 2.6.24)


Das folgende Programm kann verwendet werden, um die Verwendung der Pipe-Syntax in der Datei /proc/sys/kernel/core_pattern zu demonstrieren.

#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;
}
Nach dem Login kopieren

注意一下: 这里是指在进程当前工作目录的下创建。通常与程序在相同的路径下。但如果程序中调用了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
Nach dem Login kopieren

cat /proc/sys/kernel/core_pattern 查看路径已经变为如下:

Was bedeutet Linux-Core?

下面带大家配置永久的core。只要出现内存访问越界、使用空指针、堆栈溢出等情况,都可以在这个目录下查看。

配置 core

1、首先在根目录下建立一个储存coredump文件的文件夹,命令如下:

mkdir /corefile
Nach dem Login kopieren

2、设置产生coredump文件的大小,命令如下:

ulimit -c unlimited
Nach dem Login kopieren

3、 执行以下两条命令:

echo “1” > /proc/sys/kernel/core_uses_pid       //将1写入到该文件里
echo “/corefile/core-%e-%p-%t” > /proc/sys/kernel/core_pattern
Nach dem Login kopieren

将coredump产生的格式制定好写入core_pattern文件,这样当coredump产生时会直接以这种格式存入到根目录下的文件夹corefile中。

4、修改配置文件/etc/profile

vim /etc/profile
Nach dem Login kopieren

添加 ulimit -S -c unlimited > /dev/null 2>&1

Was bedeutet Linux-Core?

执行命令生效该文件

Was bedeutet Linux-Core?

5、 在配置文件/etc/rc.local中最后面添加信息(机器重启时会自动加载该命令):添加命令:

rm -rf /corefile/*
Nach dem Login kopieren

机器重启时清空该文件夹,由于产生的coredump文件很大,若不清空的话时间长了会将硬盘占满;

再执行以下两条命令:

echo “1” > /proc/sys/kernel/core_uses_pid
echo “/corefile/core-%e-%p-%t” > /proc/sys/kernel/core_pattern
Nach dem Login kopieren

测试
下面写个例子测试一下是否配置好了corefile文件

#include int main(int argc, char *argv[]){ int *p = NULL; *p = 3; return 0; }

编译运行,注意这里需要-g选项编译。

Was bedeutet Linux-Core?

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

Was bedeutet Linux-Core?

出现core文件表示完成coredump配置。可以用通过readelf命令进行判断是否是core文件:

Was bedeutet Linux-Core?

Führen Sie gdb aus, um die Kerndatei zu lesen. Der Befehl lautet „GDB-Programm entsprechende Coredump-Datei“. Zu diesem Zeitpunkt geben Sie die GDB-Eingabeaufforderung „(gdb)“ ein. .

Was bedeutet Linux-Core?

Wie Sie dem roten Kästchen-Screenshot entnehmen können, wird das Programm aufgrund von Signal 11 beendet.

Sie können den Aufrufstapel der Funktion über den Befehl bt (backtrace) (oder wo) sehen:

Was bedeutet Linux-Core?
Das heißt, wenn das Programm bis Zeile 6 von test.cpp ausgeführt wird, tritt ein Segfault auf. Der Grund dafür ist, dass es auf einen Nullzeiger zeigt.


Zusammenfassung

Es gibt viele Gründe für den Programm-Coredump. Hier ist eine Zusammenfassung, hauptsächlich der Speicherzugriff von Grenzen, Verwendung von Thread-unsicheren Funktionen, Verwendung von Nullzeigern, Stapelüberlauf usw.


Ich möchte hier sagen, dass man beim Debuggen von Coredump mit GDB meistens nur den intuitiven Grund für den Kern aus der Kerndatei herausfinden kann, im Allgemeinen jedoch den grundlegenderen Grund muss zusammen mit dem Code analysiert werden. Nur aus der Betrachtung des laufenden Kontexts des Prozesses können wir schließen, wo das Problem im Programmcode liegt.


Verwandte Empfehlungen: „

Linux-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas bedeutet Linux-Core?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Welche Computerkonfiguration ist für VSCODE erforderlich? Welche Computerkonfiguration ist für VSCODE erforderlich? Apr 15, 2025 pm 09:48 PM

VS Code system requirements: Operating system: Windows 10 and above, macOS 10.12 and above, Linux distribution processor: minimum 1.6 GHz, recommended 2.0 GHz and above memory: minimum 512 MB, recommended 4 GB and above storage space: minimum 250 MB, recommended 1 GB and above other requirements: stable network connection, Xorg/Wayland (Linux)

VSCODE kann die Erweiterung nicht installieren VSCODE kann die Erweiterung nicht installieren Apr 15, 2025 pm 07:18 PM

Die Gründe für die Installation von VS -Code -Erweiterungen können sein: Netzwerkinstabilität, unzureichende Berechtigungen, Systemkompatibilitätsprobleme, VS -Code -Version ist zu alt, Antiviren -Software oder Firewall -Interferenz. Durch Überprüfen von Netzwerkverbindungen, Berechtigungen, Protokolldateien, Aktualisierungen von VS -Code, Deaktivieren von Sicherheitssoftware und Neustart von Code oder Computern können Sie Probleme schrittweise beheben und beheben.

So führen Sie Java -Code in Notepad aus So führen Sie Java -Code in Notepad aus Apr 16, 2025 pm 07:39 PM

Obwohl Notepad den Java -Code nicht direkt ausführen kann, kann er durch Verwendung anderer Tools erreicht werden: Verwenden des Befehlszeilencompilers (JAVAC), um eine Bytecode -Datei (Dateiname.class) zu generieren. Verwenden Sie den Java Interpreter (Java), um Bytecode zu interpretieren, den Code auszuführen und das Ergebnis auszugeben.

Wofür ist VSCODE Wofür ist VSCODE? Wofür ist VSCODE Wofür ist VSCODE? Apr 15, 2025 pm 06:45 PM

VS Code ist der vollständige Name Visual Studio Code, der eine kostenlose und open-Source-plattformübergreifende Code-Editor und Entwicklungsumgebung von Microsoft ist. Es unterstützt eine breite Palette von Programmiersprachen und bietet Syntax -Hervorhebung, automatische Codebettel, Code -Snippets und intelligente Eingabeaufforderungen zur Verbesserung der Entwicklungseffizienz. Durch ein reiches Erweiterungs -Ökosystem können Benutzer bestimmte Bedürfnisse und Sprachen wie Debugger, Code -Formatierungs -Tools und Git -Integrationen erweitern. VS -Code enthält auch einen intuitiven Debugger, mit dem Fehler in Ihrem Code schnell gefunden und behoben werden können.

Kann VSCODE für MAC verwendet werden Kann VSCODE für MAC verwendet werden Apr 15, 2025 pm 07:36 PM

VS -Code ist auf Mac verfügbar. Es verfügt über leistungsstarke Erweiterungen, GIT -Integration, Terminal und Debugger und bietet auch eine Fülle von Setup -Optionen. Für besonders große Projekte oder hoch berufliche Entwicklung kann VS -Code jedoch Leistung oder funktionale Einschränkungen aufweisen.

So verwenden Sie VSCODE So verwenden Sie VSCODE Apr 15, 2025 pm 11:21 PM

Visual Studio Code (VSCODE) ist ein plattformübergreifender, Open-Source-Editor und kostenloser Code-Editor, der von Microsoft entwickelt wurde. Es ist bekannt für seine leichte, Skalierbarkeit und Unterstützung für eine Vielzahl von Programmiersprachen. Um VSCODE zu installieren, besuchen Sie bitte die offizielle Website, um das Installateur herunterzuladen und auszuführen. Bei der Verwendung von VSCODE können Sie neue Projekte erstellen, Code bearbeiten, Code bearbeiten, Projekte navigieren, VSCODE erweitern und Einstellungen verwalten. VSCODE ist für Windows, MacOS und Linux verfügbar, unterstützt mehrere Programmiersprachen und bietet verschiedene Erweiterungen über den Marktplatz. Zu den Vorteilen zählen leicht, Skalierbarkeit, umfangreiche Sprachunterstützung, umfangreiche Funktionen und Versionen

Was ist der Hauptzweck von Linux? Was ist der Hauptzweck von Linux? Apr 16, 2025 am 12:19 AM

Zu den Hauptanwendungen von Linux gehören: 1. Server -Betriebssystem, 2. Eingebettes System, 3. Desktop -Betriebssystem, 4. Entwicklungs- und Testumgebung. Linux zeichnet sich in diesen Bereichen aus und bietet Stabilität, Sicherheits- und effiziente Entwicklungstools.

So überprüfen Sie die Lageradresse von Git So überprüfen Sie die Lageradresse von Git Apr 17, 2025 pm 01:54 PM

Um die Git -Repository -Adresse anzuzeigen, führen Sie die folgenden Schritte aus: 1. Öffnen Sie die Befehlszeile und navigieren Sie zum Repository -Verzeichnis; 2. Führen Sie den Befehl "git remote -v" aus; 3.. Zeigen Sie den Repository -Namen in der Ausgabe und der entsprechenden Adresse an.

See all articles