我创建的工程如下所示
main.c:需要调试的主函数
opera.c:创建了一个库函数
opera.h:调用库函数的头文件
Makefile:编译脚本
.vscode:里面放GDB调试配置文件,这个文件夹前面有个点
具体文件如下:
main.c
#include
#include "opera.h"
int main()
{
int a = 20;
int b = 15;
int result;
result = add_t(a, b);
printf("add_t 20 15 : result = %d\n", result);
result = sub_t(a, b);
printf("sub_t 20 15 : result = %d\n", result);
result = mult_t(a, b);
printf("mult_t 20 15 : result = %d\n", result);
return 0;
}
opera.c
#include "opera.h"
int add_t(int a, int b)
{
return a + b;
}
int sub_t(int a, int b)
{
return a - b;
}
int mult_t(int a, int b)
{
return a * b;
}
opera.h
#ifndef __OP_H_
#define __OP_H_
int add_t(int a, int b);
int sub_t(int a, int b);
int mult_t(int a, int b);
#endif
Makefile
CC = gcc
FILENAME = test #编译完生成的文件
all:$(FILENAME)
$(FILENAME):main.o opera.o
$(CC) main.o opera.o -o $(FILENAME)
@rm *.o
main.o:main.c
@$(CC) -c -g main.c
opera.o:opera.c
@$(CC) -c -g opera.c
clean:
rm -rf $(FILENAME)
运行make进行编译,生成test可执行文件
gcc 编译时要加上 -g 选项才能开启GDB调试
首先在.vscode文件夹里创建一个launch.json文件,此文件用于配置vscode的GDB调试
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch", //显示在“调试启动配置”下拉列表中的易于阅读的名称
"type": "cppdbg", //用于此启动配置的调试器类型,此处表示C/C++代码
"request": "launch", //此启动配置的请求类型。"launch" 表示启动一个新的程序,"attach" 表示连接到一个已经运行的程序。
"program": "${workspaceFolder}/test", //你的程序路径,${workspaceFolder}表示当前路径,就是你整个工程下
"args": [], //程序入口参数
"stopAtEntry": true, //程序启动时立即中断,设置后会停在主函数处
"cwd": "${workspaceFolder}", //用于查找依赖项和其他文件的当前工作目录
"environment": [], //程序运行时的环境变量
"externalConsole": false, //控制台设置
"MIMode": "gdb", //指定了调试器的模式
// "miDebuggerArgs": "C:/msys64/mingw64/bin/gdb", //GDB的路径
"setupCommands": [ //gdb 启动后要执行的一些命令
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
//"preLaunchTask": "make" // 在启动前执行的任务,通常是构建任务,需要新建tasks.json文件,一般不使用,自己编译就行
}
]
}
这里需要注意下 "cwd": "${workspaceFolder}"这个参数,一般我们在编译程序的时候使用了-g参数就会包含进源文件的路径,此处源文件的路径就是当前目录。如果说你把当前路径的源文件比如main.c移动到了其他的路径,那么GDB调试时就会找不到这个文件,此时可以配置下 "cwd"这个参数,把新的路径给添加进来,那么GDB在当前路径找不到该文件时会去cwd路径找对应文件。
"miDebuggerArgs"这个参数用于配置GDB调试器的路径,如果说你在环境变量中已经配置了路径,那么此处不需要进行配置。
配置完后按F5或者左边点击调试按钮开启GDB调试