perintah restart

Beralih sesi debugging ke checkpoint yang ditentukan

Sintaks

restart [Nomor checkpoint]
restart 0

Parameter

Nomor checkpoint
Menentukan nomor dari checkpoint yang sebelumnya dibuat menggunakan perintah checkpoint. Jika disebutkan 0, GDB akan beralih untuk melakukan debugging pada proses asli.

Catatan

Catatan bahwa sebuah checkpoint adalah cabang eksekusi lain (fork), bukan snapshot. Jika Anda beralih ke suatu checkpoint tertentu dan melanjutkan eksekusi dari sana, status checkpoint akan diperbarui juga. Jika Anda ingin melanjutkan dari suatu checkpoint sambil mempertahankan status checkpoint, buatlah checkpoint lain sebelum melanjutkan dari yang lain.

Contoh

Kami akan menunjukkan penggunaan perintah restart menggunakan program C++ sederhana yang mengiterasi dari 0 hingga 9 dan menampilkan pesan pada setiap iterasinya:

                        
#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 membuat beberapa checkpoint pada tahap-tahap yang berbeda dari eksekusi dan menggunakan perintah info checkpoints untuk menampilkan informasi tentang mereka.

                        
(gdb) start
Temporary breakpoint 1 at 0x804847a: file test.cpp, line 11.
Starting program: /home/bazis/test

Temporary breakpoint 1, main (argc=1, argv=0xbffff064) at test.cpp:11
11              for (int i = 0; i < 10; i++)
(gdb) next
12                      report(i);
(gdb) set variable i = 5
(gdb) checkpoint
checkpoint: fork returned pid 2113.
(gdb) step
report (iteration=5) at test.cpp:6
6               printf("Pid %d, iteration %dgetpid(), iteration);
(gdb) break
Breakpoint 2 at 0x8048453: file test.cpp, line 6.
(gdb) continue
Continuing.
Pid 2109, iteration 5

Breakpoint 2, report (iteration=6) at test.cpp:6
6               printf("Pid %d, iteration %dgetpid(), iteration);
(gdb) continue 3
Will ignore next 2 crossings of breakpoint 2.  Continuing.
Pid 2109, iteration 6
Pid 2109, iteration 7
Pid 2109, iteration 8

Breakpoint 2, report (iteration=9) at test.cpp:6
6               printf("Pid %d, iteration %dgetpid(), iteration);
(gdb) restart 1
Switching to process 2113
#0  main (argc=1, argv=0xbffff064) at test.cpp:12
12                      report(i);
(gdb) next

Breakpoint 2, report (iteration=5) at test.cpp:6
6               printf("Pid %d, iteration %dgetpid(), iteration);
(gdb) restart 0
Switching to process 2109
#0  report (iteration=9) at test.cpp:6
6               printf("Pid %d, iteration %dgetpid(), iteration);
(gdb) restart 1
Switching to process 2113
#0  report (iteration=5) at test.cpp:6
6               printf("Pid %d, iteration %dgetpid(), iteration);