1.core-Datei Wenn während der Programmausführung ein Segmentierungsfehler (Core Dumped) auftritt, wird die Programmausführung angehalten und eine Core-Datei generiert. Die Kerndatei ist ein Speicherabbild des laufenden Zustands des Programms. Die Verwendung von gdb zum Debuggen der Kerndatei kann uns dabei helfen, schnell die Stelle zu finden, an der der Programmsegmentierungsfehler auftritt. Natürlich sollte die Kompilierungsoption -g beim Kompilieren des ausführbaren Programms hinzugefügt werden, um Debuginformationen zu generieren. Wenn der vom Programm abgerufene Speicher den vom System bereitgestellten Speicherplatz überschreitet, tritt ein Segmentierungsfehler (Core Dump) auf. Daher sind die wichtigsten Situationen, in denen Segmentierungsfehler auftreten, folgende: (1) Zugriff auf eine nicht vorhandene Speicheradresse; Core Dumped wird auch Core Dump genannt. Wenn während der Programmausführung eine Ausnahme auftritt und das Programm abnormal beendet wird, speichert das Betriebssystem den aktuellen Speicherstatus des Programms in einer Core-Datei, die als Core Dumped bezeichnet wird. Core bedeutet Kernspeicher, also ein aus Spulen bestehender Speicher. Heutzutage, wo die Halbleiterindustrie boomt, wird Kernspeicher nicht mehr verwendet. In vielen Fällen wird der Speicher jedoch immer noch als Kern bezeichnet. 2. Kontrollieren Sie, ob die Kerndatei generiert wird (1) Verwenden Sie den Befehl ulimit -c, um den Schalter zur Kerndateigenerierung anzuzeigen. Wenn das Ergebnis 0 ist, bedeutet dies, dass diese Funktion deaktiviert ist und keine Core-Datei generiert wird. (2) Verwenden Sie den Befehl ulimit -c filesize, um die Größe der Core-Datei zu begrenzen (die Dateigröße ist in KB angegeben). Wenn die generierten Informationen diese Größe überschreiten, werden sie abgeschnitten, was zu einer unvollständigen Kerndatei führt. Beim Debuggen dieser Kerndatei gibt gdb einen Fehler aus. Beispiel: ulimit -c 1024. (3) Wenn ulimit -c unlimited verwendet wird, ist die Größe der Core-Datei unbegrenzt. Der Befehl ulimit -c unlimited im Terminal ist nur eine temporäre Änderung und wird nach dem Neustart nicht mehr wirksam. Um eine dauerhafte Änderung vorzunehmen, gibt es drei Möglichkeiten: (1) Fügen Sie eine Zeile ulimit -c unlimited in /etc/rc.local hinzu (2) Fügen Sie eine Zeile ulimit -c unlimited in /etc/profile hinzu (3) Fügen Sie am Ende von /etc/security/limits.conf die folgenden beiden Zeilen hinzu: @root Softcore unbegrenzt @root Hardcore unbegrenzt 3.core-Dateiname und Generierungspfad Der Standarddateiname des Kerns ist core.pid, wobei sich pid auf die Prozess-ID des Programms bezieht, das den Segmentierungsfehler generiert. Wenn Sie den Namen und den Generierungspfad der Core-Datei ändern möchten, lautet die entsprechende Konfigurationsdatei: /proc/sys/kernel/core_pattern: Sie können den Speicherort und den Dateinamen der formatierten Core-Datei festlegen. Der ursprüngliche Dateiinhalt lautet beispielsweise core-%e. Nachfolgend sehen Sie eine Liste der Parameter:
Im Allgemeinen sind keine Änderungen erforderlich und die Standardeinstellungen können verwendet werden. 4. Schritte zum Debuggen von GDB-Kerndateien Wenn Sie gdb zum Debuggen der Kerndatei verwenden, um den Speicherort des Segmentierungsfehlers im Programm zu finden, sollten Sie beachten, dass das ausführbare Programm mit der Kompilierungsbefehlsoption -g kompiliert werden muss. Die allgemeinen Schritte zum Debuggen von GDB-Kerndateien sind wie folgt, und der erste wird empfohlen. Konkreter Schritt eins: (1) Starten Sie gdb und geben Sie die Core-Datei ein. Das Befehlsformat lautet: gdb [exec-Datei] [Core-Datei]. (2) Suchen Sie nach dem Aufrufen von gdb den Ort des Segmentierungsfehlers: where oder bt Anwendungsbeispiel: Der spezifische Speicherort der spezifischen Datei im Quellprogramm kann lokalisiert werden und es ist ein Segmentierungsfehler aufgetreten. Konkreter Schritt 2: (1) Starten Sie gdb und geben Sie die Core-Datei ein. Das Befehlsformat lautet: gdb –core=[Core-Datei]. (2) Geben Sie nach dem Aufrufen von gdb die Symboltabelle an, die der Kerndatei entspricht. Das Befehlsformat lautet: Datei [exec-Datei]. Konkreter Schritt drei: (1) Starten Sie gdb und geben Sie die Kerndatei ein. Das Befehlsformat lautet: gdb -c [Kerndatei]. 5. Andere Methoden zum Auffinden des Segmentierungsfehlerorts Sie können gdb zum Debuggen in einzelnen Schritten verwenden, um den Ort des Segmentierungsfehlers zu finden. Weitere Informationen zu GDB-Anwendungsfällen finden Sie unter: Oben finden Sie Einzelheiten zur Verwendung von gdb zum Debuggen von Kerndateien unter Linux. Weitere Informationen zum Debuggen von Kerndateien mit Linux gdb finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Elegantere Verarbeitung von Datumsangaben in JavaScript basierend auf Day.js
>>: So ändern Sie das Passwort des Root-Benutzers in MySQL
Inhaltsverzeichnis 1. Schritte zum Download 2. Um...
Inhaltsverzeichnis Einfache CASEWHEN-Funktion: Di...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis 1. Bootstrap-Rasterlayout 2. V...
1. Einleitung MDL-Sperren in MySQL haben schon im...
Zitat aus Baidus Erklärung zu Pseudostatik: Pseud...
In diesem Artikel wird der spezifische Code von N...
In meinem vorherigen Artikel habe ich gesagt, das...
Vorwort Während des Schreibens des Codes werden w...
Als ich kürzlich an einem System zur Gesundheitse...
Flex-Layout ist heutzutage eine häufig verwendete...
Als ich kürzlich an einem Projekt arbeitete, wurd...
In diesem Artikel wird der spezifische JavaScript...
Mit der zunehmenden Anzahl offener Plattformen ver...
Inhaltsverzeichnis 1. Geben Sie ein Verzeichnis e...