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 ---------------->从下往上,类似栈结构,查原因用

posted @ 2022-05-19 09:30  周小鱼丶  阅读(44)  评论(0)    收藏  举报