Frage

Wir haben versucht, einige Heapbeschädigung Probleme in unserer Multi-Threaded C ++ Anwendungen auf die Jagd nach. Als eine Technik, haben wir versucht, -lmcheck auf die Bibliotheken Zeile der Anwendung hinzufügen. Dies verursacht die App mit scheinbarer Heapbeschädigung in relativ kurzer Zeit zu einem Absturz aus.

Unsere App nicht verwendet sowohl malloc / free und neu / löschen (je nach Bedarf).

Einer unserer Team gefragt, ob -lmcheck tatsächlich Thread-sicher war, und ein Mutex setzen um alle malloc / free Anrufe. Die Abstürze ging weg.

Wer weiß, wenn -lmcheck soll Multi-Threading unterstützen? Ich frage mich, ob wir nur falsch verstehen, das Werkzeug versuchen wir zu nutzen und dadurch ihnen unnötige Sorgen verursacht.

War es hilfreich?

Lösung

Nein, das ist mcheck nicht Thread-sicher und soll nicht mit Multi-Threaded-Anwendungen eingesetzt werden. Dadurch können zusätzliche Probleme einzuführen, da es keine Synchronisation zwischen den Fäden ist. Hier ist die Antwort von Ulrich Drepper (glibc Maintainer) zum Thema vor ein paar Monaten:

  

mcheck funktioniert nicht für Multi-Threaded-Code. Es kann nicht   vielleicht tun. Es gibt keine Möglichkeit zu beheben   dies mit der zugrunde liegenden Technologie   mcheck.

Andere Tipps

Ich sollte überprüft, dass, bevor wir Zeit mit ihm verbracht täuscht. Ahh gut.

Hier ist der Link, wo das Zitat stammt aus (glaube ich):

http://sourceware.org/bugzilla/show_bug.cgi?id=6547

glibc Dokumentation Fehler:

http://sourceware.org/bugzilla/show_bug.cgi?id=12751

geöffnet wurde vom Schlagen dies zu vermeiden, andere zu helfen.

Als Alternative kann ich sehr empfehlen valgrind - es wird mit Multithreading-Anwendungen arbeiten - obwohl es Threads emuliert, ist es nicht wirklich selbst Threads verwenden

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top