Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: C++ (alle ISO-Standards) ::  AddressSanitizer (ASAN) unter Debian/GCC ohne Output     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
ASAN
Unregistrierter




Beitrag ASAN Unregistrierter 21:29:59 18.05.2017   Titel:   AddressSanitizer (ASAN) unter Debian/GCC ohne Output            Zitieren

Hi, wie immer muss unter Linux alles in unendliches rumgefrickel ausarten. Diesmal versuche ich den AdressSanitizer ASAN von LLVM mit GCC unter Visual Studio Code (vscode) ans Laufen zu bekommen. Folgendes habe ich bereits versucht:

MakeFile Auszug:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
add_definitions("-std=c++11")
#add_definitions("-lstdc++_s")
add_definitions("-D__GXX_EXPERIMENTAL_CXX0X__")
add_definitions("-D__cplusplus=201103L")
add_definitions("-DNDEBUG")
add_definitions("-O3")
add_definitions("-Wall")
add_definitions("-c")
add_definitions("-g3")
add_definitions("-s")
add_definitions("-fmessage-length=0")
add_definitions("-m64")
add_definitions("-fPIC")
add_definitions("-lasan")
#add_definitions("-llsan")
add_definitions("-fsanitize=address")
add_definitions("-fno-omit-frame-pointer")
 
set(CMAKE_BUILD_TYPE "Debug")
 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lGL -lGLU -lX11 -lasan -fsanitize=address -fno-omit-frame-pointer")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lGL -lGLU -lX11 -lasan -fsanitize=address -fno-omit-frame-pointer")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lGL -lGLU -lX11 -lasan -fsanitize=address -fno-omit-frame-pointer")


Ich weiß, etwas chaotisch, aber viel hilft viel :)...

Habe die Variablen

Code:
export ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.5
export ASAN_OPTIONS=symbolize=1


angelegt und mit

Code:
echo $ASAN_SYMBOLIZER_PATH
echo $ASAN_OPTIONS


zur Verifikation ausgeben lassen. Mich vergewissert, dass die "llvm-symbolizer-3.5" Datei auch existiert, sowie zusätzlich noch eine Verknüpfung auf "llvm-symbolizer" angelegt.

Mich mit

Code:
ldd ./TestApplication


vergewissert dass auch die lsan.so im Executable verlinkt wurde.

Aktuelles Debian mit GCC 4.9.2 sowie über apt-get LLVM/clang installiert.

Ich bekomme allerdings überhaupt keine output vom ASAN. Nichts.

Aufrufen tue ich das Programm mit

Code:
$ ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.5 ASAN_OPTIONS=symbolize=1 ./MyTestApplication


Einen memory leak habe ich auch eingebaut.

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    setvbuf(stdout, NULL, _IONBF, 0);
    setvbuf(stderr, NULL, _IONBF, 0);
 
    int* value = new int(42);
 
    printf(_T("Value: %d\n"), *value);
 
    printf(_T("Hello World.\n"));
    std::cin.get();
    return 0;
}
ASAN
Unregistrierter




Beitrag ASAN Unregistrierter 21:32:46 18.05.2017   Titel:              Zitieren

Jemand eine Idee warum es nicht funktioniert?
;torstein
Unregistrierter




Beitrag ;torstein Unregistrierter 05:12:25 20.05.2017   Titel:              Zitieren

Zitat:
Aktuelles Debian

Hat es leider nie gegeben. Wir sind aktuell bei gcc 7.1 und clang 4.0.

Installiere ein Ubuntu oder eine andere vernünftige Distribution mit halbwegs aktueller Software und dann funktioniert es auch. Zu Zeiten von gcc 4.9 war die Technik bestenfalls im frühen Alpha-Stadium, voller Fehler und für praktische Zwecke untauglich. Unfug wie llvm-symbolizer ist inzwischen auch nicht mehr nötig.
ASAN
Unregistrierter




Beitrag ASAN Unregistrierter 21:01:42 24.05.2017   Titel:              Zitieren

;torstein schrieb:
Zitat:
Aktuelles Debian

Hat es leider nie gegeben. Wir sind aktuell bei gcc 7.1 und clang 4.0.
nötig.


Der war gut :D. Finde die Politik von Debian auch schwachsinnig. Überlege seit längerem zu Fedora zu wechseln. Aber das ist ein anderes Thema...

Habe es jetzt trotzdem ans Laufen bekommen. Falls es jemanden interessiert. Meine cmake Einstellungen (Sorry, bin kein cmake Experte):

Code:
1
2
3
4
5
6
7
8
9
10
11
12
add_definitions("-std=c++14")
add_definitions("-DNDEBUG")
add_definitions("-Wall")
add_definitions("-c")
add_definitions("-s")
add_definitions("-fmessage-length=0")
add_definitions("-m64")
add_definitions("-fPIC")
 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lGL -lGLU -lX11 -fsanitize=leak -O3 -fno-omit-frame-pointer -g3")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lGL -lGLU -lX11 -fsanitize=leak -O3 -fno-omit-frame-pointer -g3")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lGL -lGLU -lX11 -fsanitize=leak -O3 -fno-omit-frame-pointer -g3")


Der entscheidende Punkt war aber, dass ich mit

Code:
-fsanitize=address


kompiliert hatte. Der Sanitizer gibt aber nur Outputmeldungen aus wenn auch ein Fehler gefunden wird :rolleyes:. Daher wurde im obigen Fall keine Output ausgegeben da auf keine falsche Adresse zugegriffen wurde. Ich hätte mit

Code:
-fsanitize=leak


kompilieren müssen :). Man hätte ja mal wenigstens eine Log Message "LeakSanitizer: No leaks found" oder sowas ausgeben können. Hat mich am Ende einen Abend gekostet das rauszufinden...
C++ Forum :: C++ (alle ISO-Standards) ::  AddressSanitizer (ASAN) unter Debian/GCC ohne Output   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.