tom@ubuntu:~/dvp$ cat -n mainrun.c
1 #include
2
3 int sum(const int a, const int b)
4 {
5 int c = a + b;
6 return c;
7 }
8
9 int main(int args, char* argv[])
10 {
11 for (int i = 0; i < args; ++i)
12 {
13 printf("argv[%d]=%s\n", i, argv[i]);
14 }
15
16 for (int i = 0; i < 18; ++i)
17 {
18 int s = sum(i,i+2);
19 printf("%d + %d = %d\n", i, i + 2, s);
20 }
21
22 return 0;
23 }
tom@ubuntu:~/dvp$
功能:指定要调试的文件,并读取文件的symbols以及文件的内存内容。
(gdb) help file
Use FILE as program to be debugged.
It is read for its symbols, for getting the contents of pure memory,
and it is the program executed when you use the `run' command.
If FILE cannot be found as specified, your execution directory path
($PATH) is searched for a command of that name.
No arg means to have no executable file and no symbols.
(gdb) file ./a.out
Reading symbols from ./a.out...done.
(gdb)
功能:set args命令后面可以有任意多个参数值,将会传递给file指定的调试程序
(gdb) help set args
Set argument list to give program being debugged when it is started.
Follow this command with any number of args, to be passed to the program.
(gdb) set args hello 3.1415926 pi tom goodbye
(gdb) show args
Argument list to give program being debugged when it is started is "hello 3.1415926 pi tom goodbye".
(gdb)
(gdb) r
Starting program: /home/tom/dvp/a.out hello 3.1415926 pi tom goodbye
argv[0]=/home/tom/dvp/a.out
argv[1]=hello
argv[2]=3.1415926
argv[3]=pi
argv[4]=tom
argv[5]=goodbye
0 + 2 = 2
1 + 3 = 4
2 + 4 = 6
3 + 5 = 8
4 + 6 = 10
5 + 7 = 12
6 + 8 = 14
7 + 9 = 16
8 + 10 = 18
9 + 11 = 20
10 + 12 = 22
11 + 13 = 24
12 + 14 = 26
13 + 15 = 28
14 + 16 = 30
15 + 17 = 32
16 + 18 = 34
17 + 19 = 36
[Inferior 1 (process 5896) exited normally]
(gdb)
功能:消除以前set args设置的参数
(gdb) show args
Argument list to give program being debugged when it is started is "hello 3.1415926 pi tom goodbye".
(gdb) set args
(gdb) show args
Argument list to give program being debugged when it is started is "".
(gdb) run
Starting program: /home/tom/dvp/a.out
argv[0]=/home/tom/dvp/a.out
0 + 2 = 2
1 + 3 = 4
2 + 4 = 6
3 + 5 = 8
4 + 6 = 10
5 + 7 = 12
6 + 8 = 14
7 + 9 = 16
8 + 10 = 18
9 + 11 = 20
10 + 12 = 22
11 + 13 = 24
12 + 14 = 26
13 + 15 = 28
14 + 16 = 30
15 + 17 = 32
16 + 18 = 34
17 + 19 = 36
[Inferior 1 (process 5938) exited normally]
(gdb)
功能:显示set args设置的参数
(gdb) file ./a.out
Reading symbols from ./a.out...done.
(gdb) set args hello 3.1415926 pi tom goodbye
(gdb) show args
Argument list to give program being debugged when it is started is "hello 3.1415926 pi tom goodbye".
(gdb)
功能:就是开始执行并调试程序
(gdb) run
Starting program: /home/tom/dvp/a.out
argv[0]=/home/tom/dvp/a.out
0 + 2 = 2
1 + 3 = 4
2 + 4 = 6
3 + 5 = 8
4 + 6 = 10
5 + 7 = 12
6 + 8 = 14
7 + 9 = 16
8 + 10 = 18
9 + 11 = 20
10 + 12 = 22
11 + 13 = 24
12 + 14 = 26
13 + 15 = 28
14 + 16 = 30
15 + 17 = 32
16 + 18 = 34
17 + 19 = 36
[Inferior 1 (process 5947) exited normally]
(gdb)
功能:程序跑的日志都重定向写到run.log文件中
(gdb) run > run.log
Starting program: /home/tom/dvp/a.out > run.log
[Inferior 1 (process 5980) exited normally]
(gdb) shell cat run.log
argv[0]=/home/tom/dvp/a.out
0 + 2 = 2
1 + 3 = 4
2 + 4 = 6
3 + 5 = 8
4 + 6 = 10
5 + 7 = 12
6 + 8 = 14
7 + 9 = 16
8 + 10 = 18
9 + 11 = 20
10 + 12 = 22
11 + 13 = 24
12 + 14 = 26
13 + 15 = 28
14 + 16 = 30
15 + 17 = 32
16 + 18 = 34
17 + 19 = 36
(gdb)
功能:将当期目录下的所有文件名称作为入参传递给调试程序并开始执行
注:*会用sh执行的结果给run
(gdb) run *
Starting program: /home/tom/dvp/a.out *
argv[0]=/home/tom/dvp/a.out
argv[1]=a.out
argv[2]=gdbcmd_break-btlog.txt
argv[3]=gdbcmd_btlog.txt
argv[4]=gdbcmd_comm.txt
argv[5]=gdbcmd_mallocfree_btlog.txt
argv[6]=gdbcmd_printBOX_ST.txt
argv[7]=gdbcmd_printBOX_ST.txt_bak
argv[8]=gdb_cmd.txt_bak
argv[9]=gdbcmd_watchif.txt
argv[10]=gdb.log
argv[11]=main2.c
argv[12]=main.c
argv[13]=main.c_bak
argv[14]=main.cpp
argv[15]=main.o
argv[16]=mainrun.c
argv[17]=mallocfreebtgdb.log
argv[18]=outfile
argv[19]=run.log
0 + 2 = 2
1 + 3 = 4
2 + 4 = 6
3 + 5 = 8
4 + 6 = 10
5 + 7 = 12
6 + 8 = 14
7 + 9 = 16
8 + 10 = 18
9 + 11 = 20
10 + 12 = 22
11 + 13 = 24
12 + 14 = 26
13 + 15 = 28
14 + 16 = 30
15 + 17 = 32
16 + 18 = 34
17 + 19 = 36
[Inferior 1 (process 5997) exited normally]
(gdb)
功能:将当前目录的上层目录内的文件名作为入参给调试程序,并开始执行调试程序
注:../*会用sh执行的结果给run
(gdb) run ../*
Starting program: /home/tom/dvp/a.out ../*
argv[0]=/home/tom/dvp/a.out
argv[1]=../ai
argv[2]=../CSDTK
argv[3]=../Desktop
argv[4]=../Documents
argv[5]=../Downloads
argv[6]=../dvp
argv[7]=../examples.desktop
argv[8]=../mingw32_3.4.4
argv[9]=../mips-rda-elf-20170629p2
argv[10]=../Music
argv[11]=../Pictures
argv[12]=../projects
argv[13]=../Public
argv[14]=../rv32-elf-20170919
argv[15]=../Templates
argv[16]=../Videos
0 + 2 = 2
1 + 3 = 4
2 + 4 = 6
3 + 5 = 8
4 + 6 = 10
5 + 7 = 12
6 + 8 = 14
7 + 9 = 16
8 + 10 = 18
9 + 11 = 20
10 + 12 = 22
11 + 13 = 24
12 + 14 = 26
13 + 15 = 28
14 + 16 = 30
15 + 17 = 32
16 + 18 = 34
17 + 19 = 36
[Inferior 1 (process 6037) exited normally]
(gdb)
功能:将hello 3.1415926 pi goodbye作为入参传给可执行程序并开始执行调试
(gdb) run hello 3.1415926 pi goodbye
Starting program: /home/tom/dvp/a.out hello 3.1415926 pi goodbye
argv[0]=/home/tom/dvp/a.out
argv[1]=hello
argv[2]=3.1415926
argv[3]=pi
argv[4]=goodbye
0 + 2 = 2
1 + 3 = 4
2 + 4 = 6
3 + 5 = 8
4 + 6 = 10
5 + 7 = 12
6 + 8 = 14
7 + 9 = 16
8 + 10 = 18
9 + 11 = 20
10 + 12 = 22
11 + 13 = 24
12 + 14 = 26
13 + 15 = 28
14 + 16 = 30
15 + 17 = 32
16 + 18 = 34
17 + 19 = 36
[Inferior 1 (process 6081) exited normally]
(gdb)
功能:将run执行日志重定向追加写到run.log文件中
(gdb) run > run.log
Starting program: /home/tom/dvp/a.out > run.log
[Inferior 1 (process 6176) exited normally]
(gdb) shell cat -n run.log
1 argv[0]=/home/tom/dvp/a.out
2 0 + 2 = 2
3 1 + 3 = 4
4 2 + 4 = 6
5 3 + 5 = 8
6 4 + 6 = 10
7 5 + 7 = 12
8 6 + 8 = 14
9 7 + 9 = 16
10 8 + 10 = 18
11 9 + 11 = 20
12 10 + 12 = 22
13 11 + 13 = 24
14 12 + 14 = 26
15 13 + 15 = 28
16 14 + 16 = 30
17 15 + 17 = 32
18 16 + 18 = 34
19 17 + 19 = 36
(gdb) run >> run.log
Starting program: /home/tom/dvp/a.out >> run.log
[Inferior 1 (process 6184) exited normally]
(gdb) shell cat -n run.log
1 argv[0]=/home/tom/dvp/a.out
2 0 + 2 = 2
3 1 + 3 = 4
4 2 + 4 = 6
5 3 + 5 = 8
6 4 + 6 = 10
7 5 + 7 = 12
8 6 + 8 = 14
9 7 + 9 = 16
10 8 + 10 = 18
11 9 + 11 = 20
12 10 + 12 = 22
13 11 + 13 = 24
14 12 + 14 = 26
15 13 + 15 = 28
16 14 + 16 = 30
17 15 + 17 = 32
18 16 + 18 = 34
19 17 + 19 = 36
20 argv[0]=/home/tom/dvp/a.out
21 0 + 2 = 2
22 1 + 3 = 4
23 2 + 4 = 6
24 3 + 5 = 8
25 4 + 6 = 10
26 5 + 7 = 12
27 6 + 8 = 14
28 7 + 9 = 16
29 8 + 10 = 18
30 9 + 11 = 20
31 10 + 12 = 22
32 11 + 13 = 24
33 12 + 14 = 26
34 13 + 15 = 28
35 14 + 16 = 30
36 15 + 17 = 32
37 16 + 18 = 34
38 17 + 19 = 36
(gdb)
《完》