perintah print

Mencetak nilai dari suatu ekspresi yang diberikan.

Sintaks

print [Ekspresi]
print $[Nomor nilai sebelumnya]
print {[Tipe]}[Alamat]
print [Elemen pertama]@[Jumlah elemen]
print /[Format] [Ekspresi]

Parameter

Ekspresi
Menyatakan ekspresi yang akan dievaluasi dan dicetak. Ekspresi dapat mencakup referensi ke variabel (mis. i), register (mis. $eax), dan pseudo-register (mis. $pc). Perhatikan bahwa jika ekspresi Anda merujuk pada variabel lokal, Anda perlu memastikan bahwa frame yang benar telah dipilih.
Nomor nilai sebelumnya
Jika digunakan dan i disebutkan sebagai nomor nilai sebelumnya, perintah print akan mengulangi output yang dihasilkan oleh invokasi ke-i.
Tipe/Alamat
Format ini memungkinkan untuk secara eksplisit menentukan alamat dari ekspresi yang dievaluasi dan dapat digunakan sebagai pintasan untuk konversi tipe C/C++. Contoh: *((int *)p) setara dengan {int}p
Elemen pertama/Jumlah elemen
Formulir ini memungkinkan menginterpretasikan ekspresi Elemen pertama sebagai array dari Jumlah elemen elemen berurutan. Contoh umumnya adalah *argv@argc
Format
Jika ditentukan, memungkinkan mengganti format output yang digunakan oleh perintah. Spesifikasi format yang valid adalah:
  • o - oktal
  • x - heksadesimal
  • u - desimal tanpa tanda
  • t - biner
  • f - floating point
  • a - alamat
  • c - char
  • s - string

Contoh

Kami akan menunjukkan penggunaan perintah print menggunakan program C++ sederhana yang mencetak argumen baris perintahnya sendiri:

                    
#include <stdio.h>

int main(int argc, char **argv)
{
    for(int i = 0; i < argc; i++)
        printf("Arg %d: %s\n", i, argv[i]);
    return 0;
}
                    
                

Kami akan memasuki loop dan menggunakan beberapa bentuk print untuk menampilkan nilai dari berbagai variabel:

                    
(gdb) set args arg1 arg2 arg3
(gdb) start
Temporary breakpoint 1 at 0x8048426: file test.c, line 5.
Starting program: /home/bazis/test arg1 arg2 arg3

Temporary breakpoint 1, main (argc=4, argv=0xbffff024) at test.c:5
warning: Source file is more recent than executable.
5         for(int i = 0; i < argc; i++)
(gdb) next
6               printf("Arg %d: %si, argv[i]);
(gdb) print i
$1 = 0
(gdb) print argv[i]
$2 = 0xbffff204 "/home/bazis/test"
(gdb) print /a argv[i]
$3 = 0xbffff204
(gdb) print /s argv[i]
$4 = 0xbffff204 "/home/bazis/test"
(gdb) print /c argv[i]
$5 = 4 '\004'
(gdb) print *argv
$6 = 0xbffff204 "/home/bazis/test"
(gdb) print *argv@argc
$7 = {0xbffff204 "/home/bazis/test", 0xbffff215 "arg1", 0xbffff21a "arg2", 0xbffff21f "arg3"}
(gdb) print {void *}argv@argc
$8 = {0xbffff204, 0xbffff215, 0xbffff21a, 0xbffff21f}
(gdb) print $2
$9 = 0xbffff204 "/home/bazis/test"
(gdb) next
Arg 0: /home/bazis/test
5         for(int i = 0; i < argc; i++)
(gdb) next
6               printf("Arg %d: %si, argv[i]);
(gdb) print $2
$10 = 0xbffff204 "/home/bazis/test"
(gdb) print argv[i]
$11 = 0xbffff215 "arg1"
(gdb) print /t argv[i]
$12 = 10111111111111111111001000010101