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_915909062 天前
移动端开发工具链怎么组合比较好,iOS、Android、跨端三套配置方案
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
weixin_464078073 天前
ppt转为draw.io方法
编辑器
sunoo-2293 天前
【ARM嵌入式学习笔记Day6】一文打通i.MX6ULL时钟体系:PLL/PFD/预分频+滞回比较器全解析
arm开发·笔记·vscode·单片机·imx6ull·汇编语言
明天…ling3 天前
gitee与vscode远程连接
vscode·gitee
2501_915918413 天前
iOS编程用什么软件好?主流工具Xcode、AppCode、CodeRunner与新兴快蝎对比
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
__pop_3 天前
VSCode Remote SSH 远程连接 glibc 高版本依赖问题
vscode
daxiangxm4 天前
【趣味休息】“围住小猫在线玩”-“困住小猫”,又回来了
数据结构·人工智能·vscode·github·php
星光开发者4 天前
基于Spring Boot的充电桩管理系统的设计与实现-计算机毕设【课程设计】57105
vue.js·spring boot·vscode·mysql·django·php·express
程序员允诺4 天前
内网/无网环境必备:VS Code Remote-SSH 离线包下载与手动部署教程
vscode
滕州市燕猫虎计算机科技工作室个体工商户4 天前
IDEA:Command line is too long
java·ide·intellij-idea