Wie bekomme ich Zeilennummern in der Debug-Ausgabe mit clang's -fsanitize = Adresse?

8

Ich versuche, einen Speicherfehler zu beheben, der von clang mit asan , aber von valgrind erkannt wurde. Aber ich kann meine clang gebaute Binärdatei nicht bekommen, um mir nützliche Debugging-Informationen zu geben. Ich kann dies mit einem kurzen Testprogramm demonstrieren:

%Vor%

(Offensichtlich wird dieser Fehler von valgrind übernommen, es dient lediglich dazu, das Problem mit clang anzuzeigen.)

Ich kompiliere es mit Clang 3.4-1ubuntu1 wie folgt:

%Vor%

Sicher, ./test bricht ab und ich sehe einige Debug-Informationen:

%Vor%

Aber was ich wirklich wissen möchte, sind die Zeilennummern, an denen der Fehler aufgetreten ist und wo der Speicher zugewiesen wurde.

Wie bekomme ich diese Informationen von clang + asan ?

    
detly 04.07.2014, 03:46
quelle

3 Antworten

10

Wenn wir uns die clang AdressSanitizer-Dokumentation ansehen, heißt es:

  

Damit AddressSanitizer seine Ausgabe symbolisiert, müssen Sie die Option   ASAN_SYMBOLIZER_PATH-Umgebungsvariable, um auf die   llvm-symbolizer binary (oder stellen Sie sicher, dass llvm-symbolizer in Ihrem ist   $ PATH):

und zeigt das folgende Beispiel:

  

ASAN_SYMBOLIZER_PATH = / usr / local / bin / llvm-symbolizer ./a.out

Wie das OP festgestellt hat, kann der Installationsort variieren, aber sobald Sie wissen, wo sich llvm-symbolizer befindet, sind die Schritte identisch.

    
Shafik Yaghmour 04.07.2014, 10:44
quelle
9

Ist addr2line was Sie suchen?

> %Vor%     
kay 04.07.2014 03:51
quelle
0

Manchmal gibt ein Symbolizer mit einer Versionsnummer den Fehler:

%Vor%

Dies kann durch Zeigen auf eine schmucklose llvm-symbolizer binary behoben werden:

%Vor%

Dann hat Ihre ausführbare Datei wie gewohnt ausgeführt.

    
Phlox Midas 17.01.2018 16:34
quelle

Tags und Links