2008-11-24 9 views
7

Wir haben versucht, einige Heap-Probleme in unseren Multithread-C++ - Anwendungen zu finden. Als eine Technik haben wir versucht, die Bibliothekszeile der Anwendung um -lmcheck zu ergänzen. Dies führt dazu, dass die App mit scheinbarer Heap-Beschädigung in relativ kurzer Zeit abstürzt.glibcs ​​Option '-lmcheck' und Multithreading

Unsere App verwendet sowohl malloc/free als auch new/delete (je nach Bedarf).

Eines unserer Teams fragte sich, ob -lmcheck in der Tat threadsicher war, und legte einen Mutex um alle malloc/free-Anrufe. Die Abstürze gingen weg.

Weiß jemand, ob -lmcheck Multithreading unterstützen soll? Ich frage mich, ob wir das Werkzeug, das wir benutzen wollen, einfach falsch verstehen und uns dadurch unnötige Sorgen machen.

Antwort

7

Nein, mcheck ist nicht Thread-sicher und sollte nicht mit Multithread-Anwendungen verwendet werden. Dies kann zu zusätzlichen Problemen führen, da zwischen den Threads keine Synchronisierung stattfindet. Hier ist die Antwort von Ulrich Drepper (glibc maintainer) zum Thema vor ein paar Monaten:

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

+0

Interessant. Bedeutet das, dass die "Reparatur" des Fragestellers, obwohl es anscheinend die Abstürze verhindert hat, nicht wirklich gültig ist, und dass mcheck ihm bei seiner Bewerbung nicht helfen kann? –

+0

Ich weiß nicht genug über die aktuelle Implementierung von mcheck oder die Änderungen, die im Code vorgenommen wurden, um diese Frage zu beantworten, aber ich würde wahrscheinlich davon Abstand halten und stattdessen andere Tools finden. –

0

Als Alternative kann ich Valgrind empfehlen - es wird mit Multithread-Anwendungen funktionieren - obwohl es Threads emuliert, verwendet es nicht selbst Threads.