Memory debuggen aber andersrum

OP #1343211
Lesenswert?

Hallo Leute,

Ich wandere anscheinend irgendwo im meinem Programm über ein Array 
hinaus und schreibe wo hin, wo ich eigentlich nicht hin schreiben sollte 
(das musste ja mal passieren!).

Da ich weis welche Variable ich mir überschreibe, würde ich gerne wissen 
welche Variablen kurz VOR der entsprechenden Adresse im Speicher 
abgelegt sind um so einen groben Anhaltspunkt zu finden wo ich suchen 
muss.

Gibts hier eine Möglichkeit?

Im AVR Studio sehe ich vor der entsprechenden Adresse nur "00"en, damit 
kann ich keine Rückschlüsse ziehen wie die zugehörige Variable heisst. 
Da die meisten Arrayfunktionen in meinem Programm mit UART-Kommunikation 
zu tun hat, kann ich das auch nicht simulieren. (Initialisierung dauert 
in Realzeit schon 1-2 Sekunden!, dabei gibts Handshakes etc... über den 
UART).

vielen Dank


Rocko

ps.: Atmega 2561+WINAVR, Simulation mit AVR Studio 4
#1343236
Lesenswert?

Mario Hirth schrieb:

> Da ich weis welche Variable ich mir überschreibe, würde ich gerne wissen
> welche Variablen kurz VOR der entsprechenden Adresse im Speicher
> abgelegt sind um so einen groben Anhaltspunkt zu finden wo ich suchen
> muss.
>

Ich kenn mich zwar mit dem AVR nicht aus, aber vermutlich kann dir dein 
Linker eine Symboltabelle erstellen.

Falls du gcc und konsorten verwendest, gibt es die Tools nm und objdump. 
Die sollten die von dir benotigeten Info ausgeben.

Gruss,
rweber
#1343345
Lesenswert?

Du könntest auch eine memory debugging library verwenden und das Array 
mit malloc() allokieren

solche libraries haben eine Funktion, die periodisch die Integrität der 
malloc() Strukturen (vor und hinter dem array) überprüft und abwirft, 
wenn da was daneben gegangen ist; ev kann man die Überprüfungsroutine 
auch aus einem Timer-Interrupt aufrufen.

zB das da: http://dmalloc.com/

habe das nie auf einem embedded System verwendet, sollte aber gehen 
(famous last words :-)

-Michael

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren