Forum: Compiler & IDEs IAR debug: Anzeige von n Werten von einem Pointer


von H. R. (hacker_r)


Lesenswert?

Hi
sagen wir ich habe einen Pointer mit
int16_t MyArray[100];
int16_t * MyPointer &= MyArray[100];
wie kann ich in Watch window (variable watch window nicht memory) von 
Iar die nächsten 10 Werte anzeigen lassen?
Das geht beides nicht
MyPointer[1:10]
MyPointer[0],10

Weiss wer bescheid?

von Kaj (Gast)


Lesenswert?

Lies doch bitte erstmal ein C-Buch. Du hast keine Ahnung was du da tust. 
Das Anzeigen von Werten ist dein kleinstes Problem...

von Oliver S. (oliverso)


Lesenswert?

Bei üblichen IDEs lässt sich durch rechtsklick o.ä. das Anzeigeformaz 
einer Variablen einstellen.

Aber eine IDE, die sinnlosen C-Code repariert, gibt es leider noch 
nicht.

Oliver

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Kaj schrieb:
> Lies doch bitte erstmal ein C-Buch.

Der oft gutgemeinte Ratschlag ist hier völlig verfehlt. Hier geht es 
nicht um das Programmieren in C, sondern um das /Bedienen eines 
Debuggers/.

1
In windows where you can edit the Expression field, you can specify 
2
the number of elements to be displayed in the field by adding a 
3
semicolon followed by an integer. 
4
For example, to display only the three first elements of an array 
5
named myArray, or three elements in sequence starting with the 
6
element pointed to by a pointer, write:
7
8
myArray;3
9
10
Optionally, add a comma and another integer that specifies which 
11
element to start with. For example, to display elements 10–14, write:
12
13
myArray;5,10
(Quelle: 
http://supp.iar.com/FilesPublic/UPDINFO/007040/arm/doc/EWARM_DebuggingGuide.ENU.pdf, 
Seite 69)

von H. R. (hacker_r)


Lesenswert?

Vielen dank, genau das meinte ich

MyPointer;5,10

von Kaj (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Hier geht es
> nicht um das Programmieren in C, sondern um das /Bedienen eines
> Debuggers/.
Bevor ich mir aber Code im Debugger angucken kann, sollte ich mir 
erstmal darueber im klaren sein, was der Code ueberhaupt macht. Und wenn 
ich mir diesen Code anschaue:
1
int16_t MyArray[100];
2
int16_t * MyPointer &= MyArray[100];
Bevor ich was debuggen kann, brauch ich was, das auch nur im 
entferntesten funktioniert. Und das ist bei diesem Code im leben nicht 
der Fall...
Das compiliert bei mir nicht mal (GCC 6.2.1)
1
expected »=«, »,«, »;«, »asm« or »__attribute__« before »&=« token
2
     int16_t * MyPointer &= MyArray[100];
Wuerde mich schwer wundern, wenn der IAR-Compiler das einfach so frisst.

Der Hinweis, dass es hier um die Bedienung eines Debuggers geht ist ja 
nett, aber das Problem des TO ist ein ganz anderes...

Selbst wenn das &= in dem Codeschnippsel auch nur im entferntesten das 
richtige tun wuerde, waere das Ergebnis (vermutlich) noch immer 
nicht das gewuenschte.
Mir faellt zumindestens spontan kein Grund ein, warum man einen Pointer 
auf ein Element hinter das Array setzen sollte um sich dann da n 
Elementen anschauen zu wollen... aber okay, jeder wie er mag.

von 2⁵ (Gast)


Lesenswert?

H. R. schrieb:
> int16_t * MyPointer &= MyArray[100];

Na, vermutlich meint er

int16_t *MyPointer = &MyArray[0];

alternativ sollte auch

int16_t *MyPointer = MyArray;

gehen.

von Oliver S. (oliverso)


Lesenswert?

Da die gezeigte Zeile aber so weit weg von der Lösung ist, ist

2⁵ schrieb:
> vermutlich

doch ein C-Buch hilfreich.

Oliver

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Kaj schrieb:
> Selbst wenn das &= in dem Codeschnippsel auch nur im entferntesten das
> richtige tun wuerde, waere das Ergebnis (vermutlich) noch immer
> nicht das gewünschte.


Meine Güte, stell dich doch nicht so blöd an! Der OT hat da einen 
Vertipper gemacht. Er hat eine Frage zu seinem Debugger und zum 
Verständnis zwei Zeilen Code gepostet (ja, in dem zwei Zeichen 
vertauscht sind!!!).

> Mir faellt zumindestens spontan kein Grund ein, warum man einen Pointer
> auf ein Element hinter das Array setzen sollte um sich dann da n
> Elementen anschauen zu wollen... aber okay, jeder wie er mag.

Ein Zeiger auf das erste und eine Zeiger hinter das letzte Element eines 
Bereichs ist eine durchaus übliche Notation für Bereiche (halb offenes 
Interval). Und wenn der Bereich sehr groß ist und man sich in dem Moment 
nur für das Ende interessiert, dann guckt man halt von hinten drauf.

Hier noch die Lösung für den GDB ;-)
1
p/x *(MyPointer-10)@10

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.