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、添加断点

相关推荐
2401_858286115 小时前
VSCODE远程链接错误: 无法建立链接,过程试图写入的管道不存在的解决方法
ide·vscode·编辑器
像风一样自由20205 小时前
加强版VScode结合remote-ssh远程连接服务器开发指南
服务器·vscode·ssh
一朵好运莲6 小时前
Turbo Console Log插件VSCode更改log快捷键教程
ide·vscode·编辑器
IS68311 小时前
视频文案提取技术全景:ASR vs OCR,哪种方案更适合你?
ide·macos·xcode
风筱12 小时前
Idea的CC GUI插件安装Claude Code SDK失败
java·ide·ai编程
叶小鸡12 小时前
Trae + Apifox MCP:让 AI 自动协同前后端接口文档
ai·编辑器
笨#小孩15 小时前
中间件解析漏洞与编辑器漏洞:Web安全绕过的“捷径”
web安全·中间件·编辑器
持敬chijing2 天前
PHP开发-环境搭建-安装phpstudy-vscode工具
开发语言·vscode·php
csdn_aspnet2 天前
Copilot能换成本地吗?VSCode接本地大模型本地化接入方案
ide·vscode·ai·ollama
大数据专业的小沉2 天前
解决PyCharm 2024.1 打开项目后持续卡顿,UI 无响应,编辑延迟明显
ide·python·pycharm