gdb: "Left operand of assignment ist kein lvalue."

Ich bin Debuggen von ARM-mikrocontroller aus der Ferne und versucht sich zu ändern, eine variable mit gdb wurde in den folgenden code-block:

for (int i = 0; i < 100; i++) {
    __asm__("nop");
}

Wenn ich ausführen print i ich kann sehen, dass der Wert der Variablen

(gdb) print i
$1 = 0

Ausführung whatis i gibt diese

whatis i
~"type = int\n"

Aber wenn ich versuche, die variable ändern bekomme ich folgende Fehlermeldung

(gdb) set variable i=99
Left operand of assignment is not an lvalue.

Was mache ich hier falsch?

UPDATE: hier ist der assembler-code

!        for (int i = 0; i < 100; i++) {
main+38: subs\tr3, #1
main+40: bne.n\t0x80001d0 <main+36>
main+42: b.n\t0x80001c4 <main+24>
main+44: lsrs\tr0, r0, #16
main+46: ands\tr2, r0
!            __asm__("nop");
main+36: nop    
  • Zur info ich bekomme das gleiche Verhalten mit gcc 4.8.1 auf amd64 ubuntu, wenn ich kompilieren mit -O3 aber nicht mit -O0, so versuchen Sie es zu kompilieren, ohne Optimierungen.
  • Ich habe versucht zu kompilieren, das ohne Optimierungs - kein Glück
  • Können Sie ändern alle Variablen? Wie wäre es, wenn Sie machen i flüchtigen? Sie könnte sich auch eine Auflistung der generierten assembler-code (mit debugging-Informationen enthalten, d.h. gcc -S oder gleichwertig).
  • Seltsam, nach dem Wechsel i flüchtige gdb tut mir erlauben, es zu ändern ' s Wert
  • Scheint, wie gdb lassen Sie nicht setzen Sie die variable Werte, es sei denn, die variable ist ein Speicher (die volatile Gewalt in). In Ihrem ursprünglichen Fall können Sie die entsprechenden CPU-register statt. In diesem Fall denke ich, dass wäre set $r3 = 1 ( da es aussieht wie es ist, herunter zu zählen und mit r3. ).
  • Sie haben Recht, ich kann erreichen dies durch ändern r3 registrieren. Eine weitere seltsame Sache: ich bin in der Lage, um eine variable zu ändern, wenn ich verkünde, daß es außerhalb der main () - Bereich.
  • Ich denke, @user786653 sollte Beitrag eine Antwort.
  • Ich kann nicht scheinen zu finden, eine gute Quellen zu zitieren, Geldautomaten, so dass jeder (auch der OP) ist frei zu geben, eine Antwort.
  • Sind Sie mit einer compiler-Optimierung? Ich hatte das exakt gleiche problem wie du. Etwas mehr info ist hier: stackoverflow.com/questions/1345338/... -- ich würde empfehlen, das ausschalten der Optimierung vor dem Debuggen.
  • die Deaktivierung der Optimierungen war das erste, was ich versucht habe. Ich Tat es herausfinden, irgendwann - kann mich nicht erinnern, alle details, aber das problem wurde im Zusammenhang mit der GNU-toolchain, die ich verwendet.

InformationsquelleAutor Ashton H. | 2014-03-10
Schreibe einen Kommentar