2016-05-05 9 views
7

GCC sanitizer auf 64-Bit-Systeme erstellt huge core files von etwa 17 TB.gcc Sanitizer: unmap_shadow_on_exit nicht mit benutzerdefinierten SIGSEGV Handler geehrt

Wenn Sie einen Kern für die postmortale Analyse wollen, müssen Sie die folgenden Optionen zu Sanitizer weitergeben müssen:

  • unmap_shadow_on_exit = 1 - hebt die Abbildung den riesigen Speicher, für das Housekeeping an der Ausfahrt verwendet

  • disable_core = 0 - erstellt Core-Dateien auf 64-Bit-System

    Wenn Sie jedoch mit SIGSEGV mit Ihrem eigenen Signalhandler umgehen, funktioniert unmap_shadow_on_exit nicht und eine riesige Kerndatei wird erstellt.

Irgendwelche Ideen, wie Kraft unmap_shadow_on_exit es Arbeit zu tun?

+0

Sie stellen einen Link zur Verfügung, wo 'use_madv_dontdump' beschrieben wurde, haben Sie es versucht? – fghj

+0

@ user1034749 Ich sehe nicht, dass es in gcc 4.8 vorhanden ist – dimba

Antwort

3

Der reguläre Signal-Handler ist nicht lost but returned, wenn Sie setzen Ihren Kunden Handler - also was Macht Arbeit nach diesen Code als Teil Ihrer eigenen Signal-Handler einfach aufrufen würde, nachdem Sie mit getan werden, was auch immer Funktionen, die Sie haben in dein eigener Handler.

So etwas wie;

Ich denke im Allgemeinen Signal Handler als böse, und versuchen, sie zu vermeiden - aber das kann für Sie arbeiten. Wenn Sie nur die Core-Dump-Datei vermeiden möchten, können Sie alternativ versuchen, die zulässige Größe des Core-Dumps mit ulimit -c von der Shell oder programmatic aus Ihrem eigenen Code zu beschränken - allerdings schneiden Kerndateien dies ab Art und Weise funktioniert nicht immer mit gdb das ist ein Bedarf, den Sie haben.

Verwandte Themen