Seite 1 von 1

Wie Speicherzugriffsfehler aufspüren?

Verfasst: Dienstag 2. März 2021, 23:05
von MoonKid
Derzeit kann ich reproduzierbar einen "Speicherzugriffsfehler" auslösen. Ich komme aber nicht dahinter, woran es liegen könnte.

Welche Möglichkeiten habe ich nun? Wie spürt man solche Fehler auf? Welche Tools könnte man empfehlen?

Wie ist eigentlich die exakte englische Übersetzung für den Begriff - als Web Suchwort? "memory access error"?

Re: Wie Speicherzugriffsfehler aufspüren?

Verfasst: Dienstag 2. März 2021, 23:21
von __blackjack__
@MoonKid: Wenn Du den reproduzierbar auslösen kannst, dann müsste sich doch auch eingrenzen lassen was den letztendlich auslöst. So ganz allgemein kann man nur sagen: Code auskommentieren oder durch Mocks ersetzen um den Auslöser einzugrenzen. Und oder das `trace`-Modul verwenden um zu schauen was da bis wohin ausgeführt wird. Oder mit einem Debugger Schrittweise durch den Code gehen bis man zum Absturz kommt.

Re: Wie Speicherzugriffsfehler aufspüren?

Verfasst: Dienstag 2. März 2021, 23:39
von narpfel
@MoonKid: Wenn der Segfault in C-Code auftritt, hilft es eventuell auch, Python mit ASan-Support zu kompilieren:

Code: Alles auswählen

./configure --with-assertions --with-address-sanitizer --with-undefined-behavior-sanitizer --with-pydebug ...
Wenn du Glück hast, zeigt dir das direkt an, wo es kracht (und auch, wo der Speicher alloziert wurde). Valgrind (`--with-valgrind`) ist auch noch eine Möglichkeit.

Für den Debugger sind Debug-Symbole hilfreich, die gibt’s z. B. unter Ubuntu im Paket `python3-dbg`.

Die englische Übersetzung ist „segmentation fault“ oder „access violation“.

Re: Wie Speicherzugriffsfehler aufspüren?

Verfasst: Mittwoch 3. März 2021, 00:24
von __deets__
Ich benutze für sowas den GDB. Mit dem Python zu starten zeigt üblicherweise an, wo es kracht - zumindest gut genug. Also welche Bibliothek, welcher Aufruf darin.

Re: Wie Speicherzugriffsfehler aufspüren?

Verfasst: Donnerstag 4. März 2021, 21:32
von MoonKid
Es ist "0x00007ffff407e2c0 in ?? () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0".

Ich vermute mal, dass ich Gtk misverstehe und falsch einsetze. Ich werde versuchen es in einem MWE zu reproduzieren und dann in der Gtk Community fragen.

Re: Wie Speicherzugriffsfehler aufspüren?

Verfasst: Donnerstag 4. März 2021, 21:58
von __deets__
Du kannst auch probieren debug-Symbole fuer libgtk zu installieren, und dann sagt er ggf. noch genauer, wo's kracht. Klassiker: du erzeugst ein widget, aber haelst es nicht fest, es wird garbage collected, aber die C-Schicht hat das nicht mitbekommen.