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

相关推荐
广东帝工2 分钟前
智慧航道是否是智能调度大脑
编辑器
葵花日记16 小时前
VS2022 美化指南:用 ClaudiaIDE 设置自定义编辑器背景
ide·visualstudio·编辑器
解道Jdon17 小时前
FigCraft把Figma用Rust从零重写了一遍
ide·windows·git·svn·eclipse·github·visual studio
Sunny_GMF19 小时前
Markdown 导出 HTML 实战:2.6MB 编辑器快照如何瘦身 71%(DOM 净化 + CSSOM 运行时裁剪)
编辑器·html·ai编程·harmonyos
灯澜忆梦19 小时前
【Linux】#7 | vi/vim 编辑器
linux·编辑器·vim
程序员龙一20 小时前
VsCode+ClaudeCode+Deepseek的配置
vscode·claude·deepseek·vibecoding
广东帝工21 小时前
智慧航道核心价值对航运业发展的具体影响
编辑器
广东帝工1 天前
智慧航道从“经验调度“到“智能协同“
编辑器
运维@小兵1 天前
安装Pycharm并破解
ide·python·pycharm
你说我胖?1 天前
Visual Studio编辑生成exe
ide·visual studio