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]
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