VSCode调试

一、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 -std=c++17 -Wall -g -c main.cpp #先编译成依赖main.cpp文件生成main.o文件,需要加 -g才能进行调试
gcc -std=c++17 -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 = -std=c++17 -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、远程登陆zhangzong

2、将可执行文件进行传输

3、检查文件是否可执行

4、检查gdbserver 版本号

5、启动gdbserver

输入gdbserver ip地址:终端接口 可执行文件

(注意:终端接口不能与远程连接的虚拟机端口重复,且防护墙允许访问)

6、在lxl虚拟机上打开gdp,输入target remote 192.168.137.101:6666

7、在zhangzong虚拟机上监听到了

8、可以开始调试了,先试着运行程序,使用continue

9、添加断点

相关推荐
LaughingZhu10 小时前
Product Hunt 每日热榜 | 2026-09-02
java·ide·intellij-idea
进击的蜗牛Eric11 小时前
VSCode Server手动安装指南(简洁版)
vscode
小芒果_0113 小时前
从0到1,将pycharm上的项目上传到github
ide·pycharm·github
xx~t1 天前
嵌入式——Linux软件编程——网络1
linux·c语言·网络·vscode·网络协议
sunburn-1 天前
Java堆(Heap)详解与实战教学
java·开发语言·数据结构·ide·算法
Data_Journal1 天前
Scrapyd:分步教程
开发语言·python·microsoft·golang·编辑器·html·iphone
逐步前行2 天前
ESP32-S3-VSCode扩展ESP-IDF
ide·vscode·编辑器
171320330计算机毕设编程2 天前
2027计算机毕设五大方向对比&选题推荐
java·ide·python·算法·django·php·推荐算法
2501_916008892 天前
Flutter 开发 iOS,项目打包成 IPA,命令与免 Xcode两种方法
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
zhangfeng11334 天前
WebIDE 容器中 AtomCode 报 `ATOMCODE_SIG_STALE` 排查实录:一次由 8 小时时钟偏差引发的“悬案”
编辑器·ai编程·atomcode