Forum: Mikrocontroller und Digitale Elektronik ARM Stacktrace analysieren


von ThomasH (Gast)


Lesenswert?

Hallo,

gibt es eine Möglichkeit einen Stackdump von einem CortexM3 oder anderen 
ARMs offline zu analysieren, dh ich möchte bei Exceptions den Stack 
sichern und später wenn es geht mit dem gbd analysieren. Ist so etwas 
möglich und hat das schon wer gemacht?
Hintergrund ist folgender, unsere Produkte sind eben oft Unterwegs und 
dort treten natürlich treten gerade da Exceptions auf und jetzt wäre es 
ideal, wenn ich diese loggen könnte um sie später offline analysieren.

Was mir schon sehr helfen würde, wäre der CallStack der Funktionen, aber 
das manuell ohne Framepointer zu analysieren scheint mir jetzt auch 
keine gute Idee zu sein.
Die Adresse der Instruktion bekommt man ja recht gut beim M3, aber etwas 
mehr wäre recht nett.

gr
thomas

von Kai S. (zigzeg)


Lesenswert?

ThomasH schrieb:
> Hallo,
>
> gibt es eine Möglichkeit einen Stackdump von einem CortexM3 oder anderen
> ARMs offline zu analysieren, dh ich möchte bei Exceptions den Stack
> sichern und später wenn es geht mit dem gbd analysieren. Ist so etwas
> möglich und hat das schon wer gemacht?

Spontan waehre meine Idee ein core-dump zu erstellen. Diesen sollte gdb 
einlesen koennen, und das Problem waere geloest.
Dokumentation zum core-dump findet sich als Teil der ELF Spec.

> Hintergrund ist folgender, unsere Produkte sind eben oft Unterwegs und
> dort treten natürlich treten gerade da Exceptions auf und jetzt wäre es
> ideal, wenn ich diese loggen könnte um sie später offline analysieren.

Eine andere Moeglichkeit ist ein Logging-System schon in das Produkt 
einzubauen, und gleich die Information zu dumpen die offline analysiert 
werden kann.

>
> Was mir schon sehr helfen würde, wäre der CallStack der Funktionen, aber
> das manuell ohne Framepointer zu analysieren scheint mir jetzt auch
> keine gute Idee zu sein.

Automatisieren geht ja immer.

> Die Adresse der Instruktion bekommt man ja recht gut beim M3, aber etwas
> mehr wäre recht nett.

Wie die Parameter ? Dafuer braucht man dann auf jeden Fall die 
Debug-Info.

von ThomasH (Gast)


Lesenswert?

Kai S. schrieb:
>
> Spontan waehre meine Idee ein core-dump zu erstellen. Diesen sollte gdb
> einlesen koennen, und das Problem waere geloest.
> Dokumentation zum core-dump findet sich als Teil der ELF Spec.
>

hab ich mir auch schon gedacht, aber das sollte ja wahrscheinlich nicht 
nur der Stack rein, sondern der ganze Adressraum, also zumindest noch 
die globalen Variablen.
Muss mal schauen wie aufwändig diese Lösung wäre.

> Eine andere Moeglichkeit ist ein Logging-System schon in das Produkt
> einzubauen, und gleich die Information zu dumpen die offline analysiert
> werden kann.
>

Hab mittlerweile diesen Ansatz gefunden, so eine Art ARM Simulator um 
jeweils die Functionepilogs zu finden und die Rücksprungadressen 
rauszufummeln. Sieht jedenfalls interessant aus, muss mal prüfen wie 
weit das funtkioniert.

http://www.mcternan.co.uk/ArmStackUnwinding/

>
> Automatisieren geht ja immer.
>

Ich stell mir das leider nur nicht so einfach vor, das zu 
automatisieren, siehe oben.

>> Die Adresse der Instruktion bekommt man ja recht gut beim M3, aber etwas
>> mehr wäre recht nett.
>
> Wie die Parameter ? Dafuer braucht man dann auf jeden Fall die
> Debug-Info.

Ich meinte die Adresse der Instruktion, die die Exception ausgelöst hat. 
Die Funtkion dazu ist natürlich mit dem Listing File auch kein Problem, 
aber wie schon erwähnt, wäre auch der Call Stack sehr interessant.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.