Ich muss eine Programmvariable setzen, bevor ich auf beliebige Speicherorte zugreifen kann. Kann ich den zweiten Befehl nicht sofort ausführen?
Spidey
29
Wie Nikolai gesagt hat, können Sie den Befehl gdb 'set' verwenden, um den Wert einer Variablen zu ändern.
Sie können auch den Befehl 'set' verwenden, um die Speicherorte zu ändern. z.B. Das Beispiel von Nikolai erweitern:
(gdb) l
6{7int i;8struct file *f,*ftmp;9(gdb)set variable i =10(gdb) p i
$1 =10(gdb) p &i
$2 =(int*)0xbfbb0000(gdb)set*((int*)0xbfbb0000)=20(gdb) p i
$3 =20
Dies sollte für jeden gültigen Zeiger funktionieren und kann in einen beliebigen geeigneten Datentyp umgewandelt werden.
Sie können nur set idx = 1eine Variable festlegen, diese Syntax wird jedoch nicht empfohlen, da der Variablenname möglicherweise mit einem Unterbefehl set kollidiert. Als Beispiel set w=1wäre nicht gültig.
Dies bedeutet, dass Sie die Syntax bevorzugen sollten: set variable idx = 1oder set var idx = 1.
Zu guter Letzt können Sie einfach Ihren vertrauenswürdigen alten Druckbefehl verwenden, da er einen Ausdruck auswertet. Der einzige Unterschied besteht darin, dass er auch das Ergebnis des Ausdrucks druckt.
Antworten:
Am einfachsten ist es, eine Programmvariable festzulegen (siehe GDB: Zuordnung ):
Oder Sie können einfach einen beliebigen (beschreibbaren) Speicherort nach Adresse aktualisieren:
Es gibt mehr. Lesen Sie das Handbuch .
quelle
Wie Nikolai gesagt hat, können Sie den Befehl gdb 'set' verwenden, um den Wert einer Variablen zu ändern.
Sie können auch den Befehl 'set' verwenden, um die Speicherorte zu ändern. z.B. Das Beispiel von Nikolai erweitern:
Dies sollte für jeden gültigen Zeiger funktionieren und kann in einen beliebigen geeigneten Datentyp umgewandelt werden.
quelle
Erweitern Sie die hier gegebenen Antworten.
Sie können nur
set idx = 1
eine Variable festlegen, diese Syntax wird jedoch nicht empfohlen, da der Variablenname möglicherweise mit einem Unterbefehl set kollidiert. Als Beispielset w=1
wäre nicht gültig.Dies bedeutet, dass Sie die Syntax bevorzugen sollten:
set variable idx = 1
oderset var idx = 1
.Zu guter Letzt können Sie einfach Ihren vertrauenswürdigen alten Druckbefehl verwenden, da er einen Ausdruck auswertet. Der einzige Unterschied besteht darin, dass er auch das Ergebnis des Ausdrucks druckt.
Mehr über gdb können Sie hier lesen .
quelle