Ubuntu系统下用VSCode断点调试C++代码

0 引言

Ubuntu下不能像Windows下使用Visual Studio那样方便Debug调试C++代码,所以学习记录一种用VSCode断点调试C++代码的方法。

默认已在Ubuntu下安装了VSCode

以下示例工程vsdebug文件夹下的文件目录:

# vsdebug文件夹下
.
├── build.sh
├── CMakeLists.txt
├── include
│   └── maths.h
├── src
│   ├── main.cpp
│   └── maths.cpp
└── .vscode
    ├── launch.json
    ├── settings.json
    └── tasks.json

👉本文代码GitHubhttps://github.com/MRZHUGH/CSDN/tree/main/cpp/vsdebug

1 创建vsdebug工程

1.1 创建文件夹和文件

# 新开终端,比如home目录下
mkdir vsdebug
cd vsdebug
mkdir include src
touch CMakeLists.txt build.sh
touch include/maths.h src/main.cpp src/maths.cpp

然后把这个vsdebug工程在VSCode中打开。

1.2 C++代码

整体示例代码为了实现打印出1~9的平方和立方,其中输入一个数返回这个数的平方和立方的函数在maths.hmaths.cpp实现,调用函数计算1~9的平方和立方在main.cpp实现。

打开maths.h,声明f1, f2函数:

#ifndef MATHS_H_

#define MATHS_H_ 

double f1(double a);
double f2(double b);

#endif /* MATHS_H_ */

打开maths.cpp,定义f1 , f2函数:

#include "maths.h"
// 平方计算
double f1(double a)
{
	return a * a;  
}
// 立方计算
double f2(double b)
{
	return b * b * b;
}

打开main.cpp,调用f1, f2函数:

#include <iostream>
#include "maths.h" 

int main()
{
	for(double i = 1.0; i < 10.0; i++ ){
		double x = f1(i);
		double y = f2(i);
		std::cout << i << " 的平方:" << x << std::endl;
		std::cout << i << " 的立方:" << y << std::endl;
	}

	return 0;
}

1.3 CMakeLists.txt

CMakeLists.txt文件如下:

cmake_minimum_required(VERSION 2.8)

project(vsdebug)

# 设置Debug调试模式,或Release模式
set(CMAKE_BUILD_TYPE "Debug")
# set(CMAKE_BUILD_TYPE "Release")

# -O3是一个优化选项,告诉编译器优化我们的代码。
# gcc -O0 -O1 -O2 -O3 四级优化选项及每级分别做什么优化
set(CMAKE_CXX_FLAGS "-O3")
# 设置编译模式
set(CMAKE_CXX_STANDARD 11)

# 设置lib路径
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
# 设置bin路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
# 包含include中的头文件
include_directories(
${PROJECT_SOURCE_DIR}/include/
)
# 包含src中函数实现的cpp文件,生成动态链接库
add_library(${PROJECT_NAME} SHARED
src/maths.cpp
)
# 添加main.cpp,编译成可执行文件
add_executable(main
src/main.cpp)
# main可执行文件添加链接库
target_link_libraries(main ${PROJECT_NAME})

1.4 build.sh脚本

build.sh 脚本主要为了自动执行 cmake make编译

#!/bin/bash
if [ ! -d "build" ]; then
mkdir build
else
rm -rf build/*
fi
cd build
Local_Dir=$(cd "$(dirname "$0")"; pwd)
echo "Now work at Dir: $Local_Dir"
cmake ..
make

2 VSCode配置文件

2.1 tasks.json

tasks.json文件相对于VSCode的.sh文件,可设置如何编译文件,运行文件

VScode中摁 Ctrl+Shift+p 打开控制台,输入Tasks:Configure Task,再选择Create tasks.json file from templates,最后选择Other,就在vsdebug工程下自动生成了 .vscode文件夹及文件夹中的 tasks.json文件
把生成的label修改成工程名 vsdebug;
以下比生成的多添加了 argsgroupargs是为了给main函数传参,group中的 build是为了自动执行command中的命令,所以 command 修改成 bash ./build.sh

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "vsdebug",
            "type": "shell",
            "command": "bash ./build.sh",
            "args": [],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

2.2 launch.json

VSCode中launch.json文件主要是设置如何调试,直接点击左侧边栏的Run and Debug图标,点击create a launch.json file,选择C++(GDB/LLDB),选择Default Configuration,就能自动生成launch.json文件。
一般情况下只需要改program部分内容改为项目路径下生成的执行文件即可,如果需要调试前重新编译一遍,可以新增一条preLaunchTask,内容改为tasks.json中的label名称,这里修改成vsdebug

{
	// 使用 IntelliSense 了解相关属性。
	// 悬停以查看现有属性的描述。
	// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
	"version": "0.2.0",
	"configurations": [
		{
			"name": "(gdb) 启动",
			"type": "cppdbg",
			"request": "launch",
			"program": "${workspaceFolder}/bin/main", //只修改这里
			"args": [],
			"stopAtEntry": false,
			"cwd": "${fileDirname}",
			"environment": [],
			"externalConsole": false,
			"MIMode": "gdb",
			"setupCommands": [
				{
				"description": "为 gdb 启用整齐打印",
				"text": "-enable-pretty-printing",
				"ignoreFailures": true
				}
			],
			"preLaunchTask": "vsdebug" // 可以新增一条
		}
	]
}

3 编译运行和调试

3.1 编译运行

因为已经把mkdir build && cd build , cmake .. , make 编译三件套写到 build.sh中,所以可以直接执行:

# 第一次给可执行权限
sudo chmod +x build.sh

bash build.sh

编译运行后的结果,打印出:

1 的平方:1
1 的立方:1
2 的平方:4
2 的立方:8
3 的平方:9
3 的立方:27
4 的平方:16
4 的立方:64
5 的平方:25
5 的立方:125
6 的平方:36
6 的立方:216
7 的平方:49
7 的立方:343
8 的平方:64
8 的立方:512
9 的平方:81
9 的立方:729

3.2 调试

VSCode调试可以直接摁F5,或者点击VSCode的运行–>运行调试,调试前可先设定断点,比如在main函数中给double y = f2(i);设置断点,也可以把某个变量添加到监视中,比如对main函数中的 i 添加监视,执行调试后,可以执行 单步跳过调试单步调试

请添加图片描述

至此,成功在Ubuntu系统中用VSCode断点调试C++代码。




须知少时凌云志,曾许人间第一流。



⭐️👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍🌔

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZPILOTE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值