Memory debuggen aber andersrum

OP #1343211
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
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
OP #1343336
Hi Leute,

Wow: map file, symboltable alles da...
Ich hätte wohl mal die ganzen Files die beim Compilieren angelegt werden 
mal durchsehen sollen ;-)

Da ist eine Variable namens "tempstring" ein sehr verdächtiger Nachbar!

Vielen Dank für den Hinweis...

lg Rocko
#1343345
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.