Forum: Compiler & IDEs Wie macht man einen Einzelschritt im Simulator?


von CAnfänger (Gast)


Lesenswert?

Hallo, wie macht man im Simulator denn einen "Einzelschritt", also ohne 
dem Code gleich in die Eingeweide zu schauen?

Beispiel (sinnlos, aber nur für's Prinzip)

  _delay_ms(10);
  _delay_ms(10);
  _delay_ms(10);

Der gelbe Pfeil steht auf der ersten der 3 Zeilen, und ich möchte nur 
wissen, wieviele prozessor clocks nach der ersten Zeile vergangen sind. 
Also wie komme ich mit einer Taste zur zweiten Zeite, ohne daß ich in 
die Implementierung von _delay_ms einsteige und ohne alles mit 
Breakpoints zupflastern zu müssen..? Wahrscheinlich bin ich nur zu 
blind... :-)

Optimierung hab ich ausgeschaltet..

von Karl H. (kbuchegg)


Lesenswert?

F10  Einzelschritt, ohne in eine Funktion einzusteigen
F11  Einzelschritt, wobei bei einem Funktionsaufruf in die Funktion 
hineingesteppt wird.

von PillePalle (Gast)


Lesenswert?

Step over , Step out usw.usw.

RTFM ...

von CAnfänger (Gast)


Lesenswert?

Also das komplette "Programm"

#include <util/delay.h>

void main()
{
  _delay_ms(10);
  _delay_ms(10);
  _delay_ms(10);
}


Ich drücke Start -> gelber Pfeil steht auf dem Funktiosanfang "{"

Was muß ich nun drücken, damit der gelbe Pfeil nacheinander diese 3 
Zeilen hinunterwandert (und nur diese) ? Mit F10 finde ich mich in der 
delay.h wieder, was ich gerade nicht will...

von Karl H. (kbuchegg)


Lesenswert?

PillePalle wrote:
> Step over , Step out usw.usw.
>
> RTFM ...

... oder zumindest die Namen der Menüeinträge im Debug-Menü  :-)

von Karl H. (kbuchegg)


Lesenswert?

CAnfänger wrote:
> Also das komplette "Programm"
>
> #include <util/delay.h>
>
> void main()
> {
>   _delay_ms(10);
>   _delay_ms(10);
>   _delay_ms(10);
> }
>
>
> Ich drücke Start -> gelber Pfeil steht auf dem Funktiosanfang "{"
>
> Was muß ich nun drücken, damit der gelbe Pfeil nacheinander diese 3
> Zeilen hinunterwandert (und nur diese) ? Mit F10 finde ich mich in der
> delay.h wieder, was ich gerade nicht will...


1) stimmen die Zeiten sowieso nicht
2) macht ein delay in einer Debug-Sitzung nicht wirklich Sinn. Der 
Programmierer hat einen viel größeren delay.
3) Die delay Funktion sind generell oftmals ein Zeichen für den falschen 
Programmieransatz.
4) Der Compiler wird die delay Funktionen inlinen.
5) In die Zeile nach dem delay einen Breakpoint setzen und das Programm 
dorthin laufen lassen.
6) Hab jetzt gerade kein AVR-Studio bei der Hand. Wenn ich mich recht 
erinnere, gibt es auch einen Menüpunkt 'Run to this line' oder so 
ähnlich. Wie gesagt: Einfach mal das Angebot im Debug-Menü studieren.

von CAnfänger (Gast)


Lesenswert?

Bevor Ihr hier über den nicht vorhandenen Sinn diskutiert (den ich oben 
erklärt habe) -

Könnte das bitte jemand mal kurz selbst wirklich ausprobieren? Ich habe 
die Anleitung gelesen. Ich will weder ein- noch aus-"steppen", sondern 
in der gleichen Ebene bleiben... F10 tut das bei mir nicht.

Sorry aber bis jetzt gab es das in jedem Debugger, den ich benutzt 
habe.. :-) Ich stell mich doof an..

von CAnfänger (Gast)


Lesenswert?

Also schön, ein bischen mehr Quelltext, damit es "sinnvoller" erscheint. 
:-) Was mir aufgefallen ist: Ich kann auf die Zeile PORTB=0x11; keinen 
Breakpoint setzen - sobald ich das ganze laufen lasse, erhalte ich:

Debugger: 'Break at line my1Project.c:100' has been disabled. Unable to 
bind line 100 in file "my1Project.c" to a program memory address.

Auffällig: der Debugger verwendet eine .elf-Datei, die gar nicht zu 
meinem Projekt gehört.. Compiliert wird aber die richtige Datei.. Wo 
stellt man denn das nun wieder ein, welche .elf-datei er nimmt?



#include <util/delay.h>
#include <avr/io.h>

int main()
{
  _delay_ms(10);
  PORTB=0x11;
  _delay_ms(10);
  PORTB=0x22;
  _delay_ms(10);
  PORTB=0x11;
}

von Stefan B. (stefan) Benutzerseite


Lesenswert?

CAnfänger wrote:

> Auffällig: der Debugger verwendet eine .elf-Datei, die gar nicht zu
> meinem Projekt gehört.. Compiliert wird aber die richtige Datei.. Wo
> stellt man denn das nun wieder ein, welche .elf-datei er nimmt?

Was soll er sonst nehmen? Irgendeine der Ausgabedateien muss es schon 
sein. Da bleiben (beim modernen Debugger in AVR-Studio (meinst du den 
mit "Debugger" oder meinst du einen anderen Debugger, gdb?, vmlab?)) 
exakt die ELF-Datei oder die HEX-Datei, die aus der ELF-Datei erzeugt 
wurde. Und vergleiche mal den Namen der ELF Datei mit deinem 
Projektnamen oder mit dem Target in dem Makefile.

von CAnfänger (Gast)


Angehängte Dateien:

Lesenswert?

Ich meine den Debugger vom AVR Studio (nicht den Debugger2). Ich glaube 
dieses neue "AVR Studio" hat irgendwie ne Macke.. Oder wieso gibt es bei 
mir angeblich dasselbe Windows-Fenster mit Nummer 1 aber 2 verschiedenen 
Dateien, wobei ich auch nicht umschalten kann? (siehe Bild)...

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Diesen Effekt kenne ich nicht. Ich benutze ein älteres AVR-Studio

von CAnfänger (Gast)


Lesenswert?

So, neu gestartet, jetzt hab ich zumindest dasselbe Fenster Nummer 1 
zweimal.. Ich kann jetzt auch einen Breakpoint auf diese Zeile setzen:

  PORTB=0x11;

aber egal wie ich weitergehe, F10 oder F11, ich steige immer in die 
delay.h ein...

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Wenn die BPs auf den PORTx Zeilen wieder funktionieren, gibt es eine 
pragmatische Lösung: Setze BPs auf die PORTx Zeilen und lasse das 
Programm dann frei laufen (F5)

von CAnfänger (Gast)


Lesenswert?

Naja, ich wollte es eben gerne ohne solche Krücken schaffen..

@Karl heinz: Punkt 4) wieso soll der Compiler das "inlinen" wenn ich die 
Optimierung aus habe?



Wäre wirklich nett, wenn es jemand mit einem AVR Studio testen könnte, 
ich zweifel schon arg an mir inzwischen...

von Stefan B. (stefan) Benutzerseite


Lesenswert?

CAnfänger wrote:
> Naja, ich wollte es eben gerne ohne solche Krücken schaffen..

Beim schaffen wäre mir das egal ;-)

> @Karl heinz: Punkt 4) wieso soll der Compiler das "inlinen" wenn ich die
> Optimierung aus habe?

Weil die Funktion mit dem Schlüsselwort inline dekoriert ist?

> Wäre wirklich nett, wenn es jemand mit einem AVR Studio testen könnte,
> ich zweifel schon arg an mir inzwischen...

Bei mir ginge das erst heute abend, mit einer älteren (4.12 oder 4.13) 
Version des AVR-Studios

von CAnfänger (Gast)


Lesenswert?

Super, es eilt ja nicht, aber ein Test wäre nett. Vielleicht geht es ja 
auch einfach nicht.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Weil die Funktion mit dem Schlüsselwort inline dekoriert ist?
Das lassen wir uns mal gaaanz langsam auf der Zunge zergehen ;-)

von CAnfänger (Gast)


Lesenswert?

Ich habe etwas weiterprobiert.. der ganze Rest meines Quelltextes (das 
oben ist ja nur ein Beispiel) läßt sich wie gewünscht mit F10 und F11 
debuggen, und da funktioniert es auch wie erwartet und ohne daß man 
extra bewakpoints bräuchte. Da hab ich wohl bei meinem Glück die einzige 
Ausnahme erwischt.. :-)

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Lothar Miller wrote:

>> Weil die Funktion mit dem Schlüsselwort inline dekoriert ist?
> Das lassen wir uns mal gaaanz langsam auf der Zunge zergehen ;-)

Habe ich dekoriert falsch geschrieben? Ich gehe von dieser Bedeutung 
aus:

Thesaurus-Treffer: Synonyme "auszeichnen, dekorieren, eine Auszeichnung 
verleihen"

Also ein allgemeines Kenntlichmachen (mit einem Schlüsselwort aka 
keyword), ohne die Fälle Definition und Deklaration zu unterscheiden.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

>>> Weil die Funktion mit dem Schlüsselwort inline dekoriert ist?
>> Das lassen wir uns mal gaaanz langsam auf der Zunge zergehen ;-)
> Habe ich dekoriert falsch geschrieben?
> ...Synonyme "auszeichnen...
Hmmm, so gesehen hast du recht.
Dekorieren assoziiere ich allerdings mit Sahnehäubchen, festlichen 
Tafeln und Orden, also eher mit schönen, festlichem Beiwerk.
Ich hätte (im Kontext) eher deklariert bzw. definiert erwartet  :-)

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.