一、VScode gdb调试1步骤总结2配置 launch.json文件需要修改的部分name配置文件名称可修改也可不修改program程序可执行文件的完整路径必须修改且要对应上preLaunchTask调试会话开始前需要执行的任务的名称可修改也可不修改若要修改必须与task.json中的任务名称label对应上否则无法执行任务//launch.json文件内容 { version: 0.2.0, configurations: [ { name: 调试threadpool,//可修改也可不修改 type: cppdbg, request: launch, program: ${fileDirname}/threadpool,//修改执行文件是threadpool args: [], stopAtEntry: false, cwd: ${fileDirname}, environment: [], externalConsole: false, MIMode: gdb, setupCommands: [ { description: 为 gdb 启用整齐打印, text: -enable-pretty-printing, ignoreFailures: true }, { description: 将反汇编风格设置为 Intel, text: -gdb-set disassembly-flavor intel, ignoreFailures: true } ] }, { name: C/C: g 构建和调试活动文件,//可修改也可不修改 type: cppdbg, request: launch, program: ${fileDirname}/threadpool,//修改执行文件是threadpool args: [], stopAtEntry: false, cwd: ${fileDirname}, environment: [], externalConsole: false, MIMode: gdb, setupCommands: [ { description: 为 gdb 启用整齐打印, text: -enable-pretty-printing, ignoreFailures: true }, { description: 将反汇编风格设置为 Intel, text: -gdb-set disassembly-flavor intel, ignoreFailures: true } ], preLaunchTask: C/C: g 生成活动文件,/若要修改必须与task.json中的任务名称label对应上否则无法执行任务 miDebuggerPath: /usr/bin/gdb }, { name: C/C: g-9 构建和调试活动文件,//可修改也可不修改 type: cppdbg, request: launch, program: ${fileDirname}/threadpool,//修改执行文件是threadpool args: [], stopAtEntry: false, cwd: ${fileDirname}, environment: [], externalConsole: false, MIMode: gdb, setupCommands: [ { description: 为 gdb 启用整齐打印, text: -enable-pretty-printing, ignoreFailures: true }, { description: 将反汇编风格设置为 Intel, text: -gdb-set disassembly-flavor intel, ignoreFailures: true } ], preLaunchTask: C/C: g-9 生成活动文件,若要修改必须与task.json中的任务名称label对应上否则无法执行任务 miDebuggerPath: /usr/bin/gdb }, { name: C/C: gcc 构建和调试活动文件,//可修改也可不修改 type: cppdbg, request: launch, program: ${fileDirname}/threadpool,//修改执行文件是threadpool args: [], stopAtEntry: false, cwd: ${fileDirname}, environment: [], externalConsole: false, MIMode: gdb, setupCommands: [ { description: 为 gdb 启用整齐打印, text: -enable-pretty-printing, ignoreFailures: true }, { description: 将反汇编风格设置为 Intel, text: -gdb-set disassembly-flavor intel, ignoreFailures: true } ], preLaunchTask: C/C: gcc 生成活动文件,若要修改必须与task.json中的任务名称label对应上否则无法执行任务 miDebuggerPath: /usr/bin/gdb } ] }3配置task.josn文件需要修改的部分command需要在调试之前执行的命令文件路径需要修改为makefile路径makefile要添加执行权限且在终端中输入./makefile是可以执行makefile的。args其他要传递给编译器或编译脚本的参数//task.josn文件内容 { tasks: [ { type: cppbuild, label: C/C: gcc 生成活动文件, command: /home/lxl/mythreadpool_project/makefile,//需要修改为makefile路径 args: [//修改参数 ], options: { cwd: ${fileDirname} }, problemMatcher: [ $gcc ], group: { kind: build, isDefault: true }, detail: 调试器生成的任务。 }, { type: cppbuild, label: C/C: g 生成活动文件, command: /home/lxl/mythreadpool_project/makefile, args: [ ], options: { cwd: ${fileDirname} }, problemMatcher: [ $gcc ], group: build, detail: 调试器生成的任务。 }, { type: cppbuild, label: C/C: g-9 生成活动文件, command: /home/lxl/mythreadpool_project/makefile, args: [ ], options: { cwd: ${fileDirname} }, problemMatcher: [ $gcc ], group: build, detail: 调试器生成的任务。 } ], version: 2.0.0 }//makefile 文件内容 gcc -stdc17 -Wall -g -c main.cpp #先编译成依赖main.cpp文件生成main.o文件需要加 -g才能进行调试 gcc -stdc17 -Wall main.o -g -o threadpool -lpthread -lstdc #再用生存的main.o文件生成可执行文件threadpool需要添加 -lpthread标准库不然无法执行线程函数需要添加-lstdc标准库因为用 gcc 连接 C 程序需要人为指定连接 C 标准库否则就会出现undefined reference to __gxx_personality_v/0 之类的错误。注意1、 先编译成依赖main.cpp文件生成main.o文件需要加 -g才能进行调试2、再用生存的main.o文件生成可执行文件threadpool需要加 -g才能进行调试3、需要添加 -lpthread标准库不然无法执行线程函数需要添加-lstdc标准库因为用 gcc 连接 C 程序需要人为指定连接 C 标准库否则就会出现undefined reference to __gxx_personality_v/0 之类的错误。4、下面这样的makefile文件内容会出现报错#makefile #编译器 CXX g #编译选项 CXXFLAGS -stdc17 -Wall #目标文件 TARGET threadpool #源文件 SRCS main.cpp #threadpool.cpp #目标文件 OBJS $(SRCS:.cpp.o) #头文件 HEADERS threadpool.h #默认目标 all:$(TARGET) #生成可执行文件 $(TARGET):$(OBJS) -$(CXX) $(CXXFLAGS) -o $ $^ -lpthread -./$(TARGET) #生成目标文件 %.o:%.cpp $(HEADERS) -$(CXX) $(CXXFLAGS) -c $ #清理生成文件 clean: -rm -f $(OBJS) $(TARGET)无法直接执行makefile文件按照上述步骤进行操作之后就可以进行调试了二、gdb调试1、常用命令2、远程调试1、远程登陆zhangzong2、将可执行文件进行传输3、检查文件是否可执行4、检查gdbserver 版本号5、启动gdbserver输入gdbserver ip地址终端接口 可执行文件注意终端接口不能与远程连接的虚拟机端口重复且防护墙允许访问6、在lxl虚拟机上打开gdp输入target remote 192.168.137.101:66667、在zhangzong虚拟机上监听到了8、可以开始调试了先试着运行程序使用continue9、添加断点
VSCode调试
发布时间:2026/7/5 6:03:43
一、VScode gdb调试1步骤总结2配置 launch.json文件需要修改的部分name配置文件名称可修改也可不修改program程序可执行文件的完整路径必须修改且要对应上preLaunchTask调试会话开始前需要执行的任务的名称可修改也可不修改若要修改必须与task.json中的任务名称label对应上否则无法执行任务//launch.json文件内容 { version: 0.2.0, configurations: [ { name: 调试threadpool,//可修改也可不修改 type: cppdbg, request: launch, program: ${fileDirname}/threadpool,//修改执行文件是threadpool args: [], stopAtEntry: false, cwd: ${fileDirname}, environment: [], externalConsole: false, MIMode: gdb, setupCommands: [ { description: 为 gdb 启用整齐打印, text: -enable-pretty-printing, ignoreFailures: true }, { description: 将反汇编风格设置为 Intel, text: -gdb-set disassembly-flavor intel, ignoreFailures: true } ] }, { name: C/C: g 构建和调试活动文件,//可修改也可不修改 type: cppdbg, request: launch, program: ${fileDirname}/threadpool,//修改执行文件是threadpool args: [], stopAtEntry: false, cwd: ${fileDirname}, environment: [], externalConsole: false, MIMode: gdb, setupCommands: [ { description: 为 gdb 启用整齐打印, text: -enable-pretty-printing, ignoreFailures: true }, { description: 将反汇编风格设置为 Intel, text: -gdb-set disassembly-flavor intel, ignoreFailures: true } ], preLaunchTask: C/C: g 生成活动文件,/若要修改必须与task.json中的任务名称label对应上否则无法执行任务 miDebuggerPath: /usr/bin/gdb }, { name: C/C: g-9 构建和调试活动文件,//可修改也可不修改 type: cppdbg, request: launch, program: ${fileDirname}/threadpool,//修改执行文件是threadpool args: [], stopAtEntry: false, cwd: ${fileDirname}, environment: [], externalConsole: false, MIMode: gdb, setupCommands: [ { description: 为 gdb 启用整齐打印, text: -enable-pretty-printing, ignoreFailures: true }, { description: 将反汇编风格设置为 Intel, text: -gdb-set disassembly-flavor intel, ignoreFailures: true } ], preLaunchTask: C/C: g-9 生成活动文件,若要修改必须与task.json中的任务名称label对应上否则无法执行任务 miDebuggerPath: /usr/bin/gdb }, { name: C/C: gcc 构建和调试活动文件,//可修改也可不修改 type: cppdbg, request: launch, program: ${fileDirname}/threadpool,//修改执行文件是threadpool args: [], stopAtEntry: false, cwd: ${fileDirname}, environment: [], externalConsole: false, MIMode: gdb, setupCommands: [ { description: 为 gdb 启用整齐打印, text: -enable-pretty-printing, ignoreFailures: true }, { description: 将反汇编风格设置为 Intel, text: -gdb-set disassembly-flavor intel, ignoreFailures: true } ], preLaunchTask: C/C: gcc 生成活动文件,若要修改必须与task.json中的任务名称label对应上否则无法执行任务 miDebuggerPath: /usr/bin/gdb } ] }3配置task.josn文件需要修改的部分command需要在调试之前执行的命令文件路径需要修改为makefile路径makefile要添加执行权限且在终端中输入./makefile是可以执行makefile的。args其他要传递给编译器或编译脚本的参数//task.josn文件内容 { tasks: [ { type: cppbuild, label: C/C: gcc 生成活动文件, command: /home/lxl/mythreadpool_project/makefile,//需要修改为makefile路径 args: [//修改参数 ], options: { cwd: ${fileDirname} }, problemMatcher: [ $gcc ], group: { kind: build, isDefault: true }, detail: 调试器生成的任务。 }, { type: cppbuild, label: C/C: g 生成活动文件, command: /home/lxl/mythreadpool_project/makefile, args: [ ], options: { cwd: ${fileDirname} }, problemMatcher: [ $gcc ], group: build, detail: 调试器生成的任务。 }, { type: cppbuild, label: C/C: g-9 生成活动文件, command: /home/lxl/mythreadpool_project/makefile, args: [ ], options: { cwd: ${fileDirname} }, problemMatcher: [ $gcc ], group: build, detail: 调试器生成的任务。 } ], version: 2.0.0 }//makefile 文件内容 gcc -stdc17 -Wall -g -c main.cpp #先编译成依赖main.cpp文件生成main.o文件需要加 -g才能进行调试 gcc -stdc17 -Wall main.o -g -o threadpool -lpthread -lstdc #再用生存的main.o文件生成可执行文件threadpool需要添加 -lpthread标准库不然无法执行线程函数需要添加-lstdc标准库因为用 gcc 连接 C 程序需要人为指定连接 C 标准库否则就会出现undefined reference to __gxx_personality_v/0 之类的错误。注意1、 先编译成依赖main.cpp文件生成main.o文件需要加 -g才能进行调试2、再用生存的main.o文件生成可执行文件threadpool需要加 -g才能进行调试3、需要添加 -lpthread标准库不然无法执行线程函数需要添加-lstdc标准库因为用 gcc 连接 C 程序需要人为指定连接 C 标准库否则就会出现undefined reference to __gxx_personality_v/0 之类的错误。4、下面这样的makefile文件内容会出现报错#makefile #编译器 CXX g #编译选项 CXXFLAGS -stdc17 -Wall #目标文件 TARGET threadpool #源文件 SRCS main.cpp #threadpool.cpp #目标文件 OBJS $(SRCS:.cpp.o) #头文件 HEADERS threadpool.h #默认目标 all:$(TARGET) #生成可执行文件 $(TARGET):$(OBJS) -$(CXX) $(CXXFLAGS) -o $ $^ -lpthread -./$(TARGET) #生成目标文件 %.o:%.cpp $(HEADERS) -$(CXX) $(CXXFLAGS) -c $ #清理生成文件 clean: -rm -f $(OBJS) $(TARGET)无法直接执行makefile文件按照上述步骤进行操作之后就可以进行调试了二、gdb调试1、常用命令2、远程调试1、远程登陆zhangzong2、将可执行文件进行传输3、检查文件是否可执行4、检查gdbserver 版本号5、启动gdbserver输入gdbserver ip地址终端接口 可执行文件注意终端接口不能与远程连接的虚拟机端口重复且防护墙允许访问6、在lxl虚拟机上打开gdp输入target remote 192.168.137.101:66667、在zhangzong虚拟机上监听到了8、可以开始调试了先试着运行程序使用continue9、添加断点