GDB调试备忘
0.如果有一个需要Debug的程序Love.cpp:
#include<iostream>
using namespace std;
void func(int m){
printf("第%d次说爱你";m);
}
int main() {
for(int i=0;i++;i<=99){
func(i);
return 1;
}
1.使用GDB操作:
1.1进入GDB:
使用gcc在Debug模式下编译生成执行文件
gcc -g Love.cpp -o Love
进入exe同级目录打开终端,使用GDB调试,attach附加进程号:
gdb ./Love attach pid
1.2 GDB命令:
帮助:
(gdb) help list
从首行列出源码:相当于list,默认10行:
(gdb) l
(gdb) set listsize 20---------------->修改列出源码行数
(gdb) l 3,7---------------->显示3-7行代码
(gdb) func---------------->显示func函数周围代码
设置断点: b或者break :
(gdb) b
(gdb) b 5 ---------------->表示从在5行处
(gdb) b Func ---------------->表示从在函数Func()处
(gdb) r ---------------->run
(gdb) n ---------------->next单步调试
(gdb) step ---------------->step单步调试,会进入函数内部
(gdb) c ---------------->continue执行到下一断点处或者直接输出,类似F5
(gdb) finish ---------------->退出调用的函数
(gdb) info break ---------------->表示查看所有断点信息
(gdb) enable 2 ---------------->enable 断点号
(gdb) delete 2 ---------------->删除断点断点号
clear ---------------->删除程序中所有断点
clear 行号 ---------------->删除该行的断点
clear 函数名 ---------------->删除该函数的断点
打印,查找:
(gdb) p i ---------------->print打印变量i
(gdb) whatis i ---------------->显示变量类型
(gdb) search Func ---------------->从头查找Func
终止循环体:
(gdb) untill或者u
给main函数赋值:
set args 字符串1 字符串2 字符串3 ......
(gdb) set args a b c ---------------->argc[0] = a,argc[1] = b,argc[2] = c
GDB中使用shell:
(gdb) shell ls
GDB中查看数组:
int *array = (int *) malloc (8* sizeof (int));
(gdb) p *array@len ---------------->查看这个动态数组的所有值
int array[3] = {1,2,3};
(gdb) p array ---------------->查看这个静态数组的所有值
GDB中查看函数堆栈调用,一般在掉core时看:
(gdb) bt ---------------->从下往上,类似栈结构,查原因用
本文来自博客园,作者:{author 周小鱼},转载请注明原文链接:https://www.cnblogs.com/zhouxiaoyu16/p/16287329.html

浙公网安备 33010602011771号