GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie man programmgesteuert einen Core-Dump in C/C++ verursacht

Vor einigen Jahren veröffentlichte Google die Coredumper-Bibliothek.

Übersicht

Die Coredumper-Bibliothek kann in Anwendungen kompiliert werden, um Core-Dumps des laufenden Programms zu erstellen – ohne sich zu beenden. Es unterstützt sowohl Single- als auch Multithread-Core-Dumps, auch wenn der Kernel keine Multithread-Core-Dateien unterstützt.

Coredumper wird unter den Bedingungen der BSD-Lizenz vertrieben.

Beispiel

Dies ist keineswegs ein vollständiges Beispiel; es gibt Ihnen einfach ein Gefühl dafür, wie die Coredumper-API aussieht.

#include <google/coredumper.h>
...
WriteCoreDump('core.myprogram');
/* Keep going, we generated a core file,
 * but we didn't crash.
 */

Es ist nicht das, wonach Sie gefragt haben, aber vielleicht ist es sogar noch besser :)


Setzen von Signal Nummer 6 (SIGABRT unter Linux) ist eine Möglichkeit, dies zu tun (beachten Sie jedoch, dass SIGABRT nicht erforderlich ist in allen POSIX-Implementierungen 6 sein, also möchten Sie vielleicht die SIGABRT verwenden Wert selbst, wenn dies etwas anderes als Quick'n'Dirty-Debug-Code ist).

#include <signal.h>
: : :
raise (SIGABRT);

Anruf abort() wird auch einen Core-Dump verursachen, und Sie können dies sogar ohne tun Beenden Sie Ihren Prozess, indem Sie fork() aufrufen gefolgt von abort() nur beim Kind - siehe diese Antwort für Details.


Linux
  1. So aktivieren Sie Core-Dump für Anwendungen auf CentOS/RHEL

  2. Wie erhalte ich programmgesteuert die CPU-Cache-Seitengröße in C++?

  3. (C/C++) Wie generiert man eine ausführbare Datei, die sowohl unter Windows als auch unter Linux ausgeführt werden kann?

  4. Aktivieren Sie Core/Crash-Dumps programmgesteuert

  5. Wie analysiere ich die Core-Dump-Datei eines Programms mit GDB, wenn sie Befehlszeilenparameter enthält?

So installieren Sie Windows PowerShell Core 6.0 unter Linux

So führen Sie C/C++-Programme unter Linux aus [Terminal &Eclipse]

Wie installiere ich Dotnet Core auf Centos 7?

Wie erstelle ich programmgesteuert Videos?

Wie kann meine C/C++-Anwendung feststellen, ob der Root-Benutzer den Befehl ausführt?

Wie verwende ich GDB in Eclipse für C/C++-Debugging?