GDB调试使用

GDB调试使用

代码环境如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
void test()
{
int i=100;
std::cout << "i is " << i << std::endl;
}
int main(int argc,char**argv)
{
int itest=100;test();
const char *str="this is a test";
std::cout << "itest is " << itest << ",str is " << str << std::endl;
std::cout << "参数为:" << std::endl;
for(int i=0;i<argc;i++)
{
std::cout << argv[i]<<std::endl;
}
std::cout << "Hello world\n";
return 0;
}

启动调试

传入参数

1
2
gdb --args 参数
在gdb中使用set args和r指定参数

附加进程

对运行的进程进行调试

1
2
3
gdb attach pid

gdb --pid pid

执行

1
2
3
n 不会进入函数
s 会进入函数
finish 退出函数

断点管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
b 文件名:行数

b 函数名,如果是同名函数则都会标记

rb 名字。对于带这个名字的函数都会进行标记,包括虚函数,或者命名不全的函数

b 断点 条件 b main.cpp:14 if i==90。也就是执行循环到到i=90才会停止

tb 断点。设置临时断点。对于一个循环来说,虽然断点在这,但只会执行一次,就不执行循环了

i b查看所有断点

i b 1 查看编号1的断点

delete 1 删除断点1

delete 删除所有断点

disable 1 禁用断点1

enable 1 使能断点1

//为断点执行命令:
commads

命令1

命令2

end

//保存断点信息

save breakpoints 文件名.tx

//还原断点信息

source 文件名.txt

变量查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
info args 查看输入的全部信息

p argc查看输入了几个变量

p argv[0]查看第一个变量是什么

info args 查看输入的全部信息

p argc查看输入了几个变量

p argv[0]查看第一个变量是什么

set p null-stop//设置字符串不显示后面的空余空间

set p pretty//结构体和数组显示规则更好看,每行一个

p int=10 //修改整型

p str=“str” //修改字符串

//修改结构体
p test.name="str"

p test.agr=10

p strcpy(test.name, "str")

内存查看和修改

1
2
3
4
5
6
7
x /d 10进制显示

x /b 二进制显示

x /s显示字符串

x /wx查看word字节

寄存器查看和修改

1
i r rdi/rsi/rdx/rcx/r8/r9
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2024 John Doe
  • 访问人数: | 浏览次数:

让我给大家分享喜悦吧!

微信