4 Stimmen

Analysiere den Gleitkommawert in gdb

Beispielcode:

int main()
{
        float x = 456.876;

        printf ("\nx = %f\n", x);

        return 0;
}

In gdb habe ich diesen Code wie folgt ausgeführt:

Breakpoint 1, main () at sample_float.c:5   
5               float x = 456.876;   
(gdb) n    
7               printf ("\nx = %f\n", x);   
(gdb) p &x   
$1 = (float *) 0x7fffffffd9dc   
(gdb) x/4fb &x   
0x7fffffffd9dc: 33      112     -28     67   

Ist es möglich, den Wert an der Adresse von x mit dem Befehl x/fb als: 456.876 zu sehen?

Vielen Dank.

10voto

cnicutar Punkte 173420

Vielleicht habe ich deine Frage falsch verstanden, aber du kannst einfach folgendes tun

p/f x

Oder

x/f &x

War das, wonach du gesucht hast?

2voto

matt Punkte 5199

Stimmen mit der obigen Antwort überein, um jedoch zu verstehen, warum Sie die Ergebnisse erhalten haben, die Sie erzielt haben.

(gdb) x/4fb &x   
0x7fffffffd9dc: 33      112     -28     67 

aus dem gdb-Handbuch

x/3uh 0x54320' ist eine Anfrage zum Anzeigen von drei Halbwörtern (h) des Speichers, formatiert als vorzeichenlose Dezimalzahlen (u'), beginnend bei der Adresse 0x54320.

Daher formatiert x/4fb &x ein Byte als Float 4 mal. nicht 4 Bytes als Float.

0voto

vishu Punkte 71

Hier ist ein Link zur Untersuchung des Speichers mit gdb

Mit dem Befehl x ("untersuchen") können Sie den Speicher in verschiedenen Formaten untersuchen, unabhängig von den Datentypen Ihres Programms.

x/nfu addr
x addr
x
n, f und u sind alle optionale Parameter, die angeben, wie viel Speicher angezeigt werden soll und wie er formatiert werden soll; addr ist ein Ausdruck, der die Adresse angibt, an der Sie mit der Anzeige des Speichers beginnen möchten. Wenn Sie die Standardeinstellungen für nfu verwenden, müssen Sie den Schrägstrich '/' nicht eingeben. Mehrere Befehle setzen bequeme Standardeinstellungen für addr.

n, die Wiederholungszahl
Die Wiederholungszahl ist eine Dezimalzahl; die Standardeinstellung ist 1. Sie gibt an, wie viel Speicher (bei der Zählung in Einheiten u) angezeigt werden soll.

f, das Anzeigeformat
Das Anzeigeformat ist eines der Formate, die von print verwendet werden, 's' (nullterminierte Zeichenfolge) oder 'i' (Maschinenbefehl). Die Standardeinstellung ist anfangs 'x' (hexadezimal). Die Standardeinstellung ändert sich jedes Mal, wenn Sie entweder x oder print verwenden.

u, die Einheitsgröße
Die Einheitsgröße ist eine der folgenden:
 b: Bytes.
 h: Halbwörter (zwei Bytes).
 w: Wörter (vier Bytes). Dies ist die anfängliche Voreinstellung.
 g: Riesenwörter (acht Bytes).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X