一、配置程序运行依赖

1, 打开配置文件(launch.json)

(1) 从工具栏打开Run–>Add Configuration…
在这里插入图片描述

(2)查看配置文件(launch.json)
在这里插入图片描述


2,添加配置

(1) 配置可执行程序(program);
(2) 指明调试器类型(type);
(3) 可执行程序工作目录(cwd);
(4) 配置可执行程序输入参数(args);
(5) 添加可执行程序依赖的环境变量(environment);
(6) 添加调试器(MIMode) ;
在这里插入图片描述


3, 配置参数介绍

(1)name:配置的名字,可以存在不同配置,一般是一个调试目标有一个配置(显示在调试侧边栏上下拉选择列表中);
(2)type:表明调试器的类型,使用Visual Studio Windows Debuger的时候必须是cppvsdbg;使用GDB或者LLDB时为cppdbg
(3) request:表明是执行(launch)目标程序,还是连接(attach)已有的实例;
(4)program:表明调试的目标程序;
(5)args:执行目标参数需要的参数,格式为json列表;
(6) cwd:目标程序执行的工作目录;
(7) MIMode:表明使用的调试器,gdb或者是lldb
(8) preLaunchTask:就是在开始调试前需要执行的任务,定义在task.json文件中,一般用来定义编译任务,生成目标程序。

// launch.json示例
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [ 
        {
            "name": "gcc - 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "/home/sbinhuang/Desktop/workspace/self_utility/test/test_exec",
            "args": [],
            "stopAtEntry": false,
            "cwd": "/home/sbinhuang/Desktop/workspace/self_utility/test",
            "environment": [
                {"name": "LD_LIBRARY_PATH", "value": "/home/sbinhuang/Desktop/workspace/self_utility/bin/self_utility"}
            ],
            "externalConsole": false,
            "MIMode": "gdb",
        }
    ]
}

二、调试程序

1,添加断点

(1)打开源文件(cpp),鼠标点击代码行左侧区域,出现一个红点,标识此处被设置为一个断点;
在这里插入图片描述


2,开启调试模式,运行可执行程序

(1) 工具栏Run–> Start Debugging
在这里插入图片描述

(2) 步骤(1)操作后,进入程序调试界面,左边栏时调试时,变量值和程序调用栈;右边是代码以及显示程序执行到的位置;
在这里插入图片描述

(3) 控制程序运行
在这里插入图片描述


3,调试多进程程序

(1) 调试程序运行到创建一个子进程时,设置跟踪控制的进程;需要在调试终端命令行串口输入命令(set follow-fork-mode mode);

# 调试子进程
set follow-fork-mode child
# 调试当前进程
set follow-fork-mode parent

(2) 调试当前进程,设置当前进程模式
在这里插入图片描述

(3) 调试子进程,设置子进程模式
在这里插入图片描述

(4) 当前进程模式,调试示例
在这里插入图片描述

在这里插入图片描述

(4) 子进程模式,调试示例
在这里插入图片描述

在这里插入图片描述

三、注意事项

(1)fork(), system()产生子进程,调试时,切换到子进程后,立即设置set follow-fork-mode parent, 避免陷入下一级子进程;
(2)参考文章

https://code.visualstudio.com/docs/cpp/launch-json-reference
https://code.visualstudio.com/docs/cpp/config-linux
Logo

更多推荐