【跟我一起学gdb】(11)自动化gdb脚本之 file命令 + run命令 + set args命令 + show args命令

mian.c

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$ 

file命令

功能:指定要调试的文件,并读取文件的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

功能: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

功能:消除以前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) 

show args 

功能:显示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) 

run命令

功能:就是开始执行并调试程序

(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 > run.log

功能:程序跑的日志都重定向写到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) 

run *

功能:将当期目录下的所有文件名称作为入参传递给调试程序并开始执行

注:*会用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)

run ../*

功能:将当前目录的上层目录内的文件名作为入参给调试程序,并开始执行调试程序

注:../*会用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) 

run hello 3.1415926 pi goodbye

功能:将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

功能:将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) 

《完》

你可能感兴趣的:(GDB)