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

相关推荐
2501_942389552 小时前
小米寥寥几家车企设计汽车顶棚
华为·编辑器·时序数据库·harmonyos
测试工程师成长之路2 小时前
Typora插件开发指南:打造专属IDE式写作环境
ide
π同学4 小时前
ESP-IDF+vscode开发ESP32第十七讲——USB设备栈
vscode·esp32·usb
iPad协议个微协议4 小时前
Typora插件开发指南:打造专属IDE式写作环境
ide
love530love4 小时前
AI Agent + 本地 ComfyUI 无头模式实战:关闭 IDE 后 AI 独立重启并完成图文生成
ide·人工智能·windows·python·音视频·agent·devops
VidDown18 天前
VidDown 工具站:免费、本地优先的开发者工具箱
javascript·编辑器·音视频·视频编解码·视频
摇滚侠18 天前
IDEA 创建 Java 项目 手动整合 SSM 框架
java·ide·intellij-idea
霸道流氓气质18 天前
Trae IDE 新手入门指南
ide
VidDown18 天前
显卡处理视频技术详解:从硬解码到 NVENC,GPU 如何让视频处理起飞?
javascript·编辑器·音视频·视频编解码·视频