Hallo zusammen, Gestern war es mal wieder soweit und ein STM32 ist mit einer SIGTRAP hängen geblieben. Der Fehler war ein falscher Speicherzugriff. Gibt es eine Möglichkeit, die Stelle im Code zu finden, die zuletzt ausgeführt wurde vor dem Crash? Auf die Register kann ich über GDB noch zugreifen. Und im Stack müssten ja Adressen sein. Wie komme ich da ran? Ich freue mich über jede Hilfe, um den nächsten Bug schneller zu finden :)
bt (backtrace)
Der Trace wird mir auch so angezeigt. Das hier kommt, wenn ich bt ausführe: #0 0x00000000 in ?? () #1 0xfffffff8 in ?? () #2 0xfffffff8 in ?? () Backtrace stopped: previous frame identical to this frame (corrupt stack?) Das hilft mir leider noch nicht weiter.
Schaue hier: Beitrag "Cortex-M3 Programm-Counter auslesen?" Damit kann man sich einen eigenen Trace aufbauen. Ich brauch das ziemlich oft und hilft ungemein. Die Adressen der Routinen stehen in der MAP-Datei.
Sehr gut! In der .lss Datei sind sogar alle Anweisungen drin. Damit kann man perfekt die aktuelle Stelle finden. Das wird mir in Zukunft viel Zeit sparen beim Debuggen. Danke!
Eventuell ist auch http://stackoverflow.com/questions/9837594/sigtrap-despite-no-set-breakpoints-hidden-hardware-breakpoint hilfreich
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.