欢迎光临散文网 会员登陆 & 注册

vscode界面调试C++程序(linux)

2023-02-14 21:46 作者:汗族小子  | 我要投稿

(注意:由于是界面操作,可能很多操作存在等价替代,各位根据自己习惯选用即可。)

(部分词汇可能是根据vscode的显示或者个人瞎叫的,不一定专业,有任何方法上的问题也请指出,我们一起讨论进步)

(实操可以参考我的视频再谈vscode界面调试C++程序(linux)

本文针对linux平台下的C++代码调试,通常情况下使用vscode调试有以下两种方案:

  1. 直接使用C++插件调试,此时需要自行编译。

  2. 使用Cmake插件,在配置完成后可以和Clion类似,接管编译和调试等全过程。

本文以方案1为主进行讲解。

一. 前提条件

系统环境:centos7.8
软件要求:vscode 1.75.0 、 C++插件 、modern fortran插件(支持fortran断点)

示例代码包含一个“main.cpp”

二. 界面简介

vscode文件编辑界面如下:

vscode界面

vscode运行和调试界面如下:

运行和调试界面

反汇编区域和二进制查看区域根据需求打开。


三. 调试前的配置

3.1. 新建配置文件

点击左侧边栏的“运行和调试”按钮。

点击“创建 launch.json 文件”,之后根据提示选择C++调试类型或者任选之后手动配置。

配置文件 launch.json 的存放位置为当前工作区的 .vscode 文件夹中。配置文件可以直接拷贝现有工程复用。

3.2 新建C++调试的配置

打开配置文件,选择右下角的新建配置,或者直接在“configurations”中使用vscode的代码提示添加配置。

添加配置

正常调试请选择 “C/C++:(gdb) 启动”,如果是附加调试,请选择“C/C++:(gdb) 附加” 根据情况还可以选择管道相关的调试配置项目。

3.3 修改配置

针对本示例程序,我们选择“C/C++:(gdb) 启动”,然后根据自己需求修改配置内容,通常鼠标光标悬停到key上可得知每项含义。

此示例程序已经编译得到debug版本的二进制程序在当前工作区的“/build/a.out”
因此只需要修改program的值:

launch.json文件和工程对应,可存在多个配置,各配置中建议尽可能使用vscode支持的环境变量,配置文件可复用。

注意:如果需要在每次调试启动前自动编译,则可以设置pretask等功能。更多配置设置请参考配置文件提示。更多详细的配置和功能,请参考配置文件中的链接提示。

注意:本示例中已经包含了配置好的配置文件,可以针对给出的示例代码进行调试,包含了正常调试和附加调试两个配置,可以直接复用。

四. 功能点简介

1.启动调试

按F5可直接启动默认配置。另外,可在运行和调试界面选择你所需的配置启动。

2.控制程序运行

调试控制栏

调试过程中,可以通过调试控制栏控制程序的运行,程序暂停时会高亮暂停点所在行。

2.查看堆栈

程序暂停后直接在调用堆栈区域可查看调用堆栈信息,点击对应的层会跳转到对应的代码(如果有)。根据需要可以打开反汇编视图查看汇编代码执行情况。

3.变量

程序暂停后可直接在变量显示区域查看当前作用域的所有变量,调用栈层级变化后变量区域会自动更新,此区域也支持变量直接修改。复杂数据类型可以依次展开,根据需求还可以查看其二进制数据。

对于部分需要重点监视的变量,可以将其加入监视区,监视区的显示逻辑和变量区类似,同样可以对其进行修改。

4.断点设置

4.1 断点窗口简介

所有的断点均可以可视化的在断点窗口可以被看到,在断点窗口可以针对每一个断点进行修改,包括删除和新建(函数断点),激活和取消激活。点击对应断点后会在代码的对应区域高亮显示。

4.2 位置断点

最普通的断点一般是设定在程序的某一行,在运行到此行时暂停,这种断点叫做位置断点。在vscode中和通常的IDE类似可以直接在对应的代码行前面设置即可。

4.3 条件断点

和普通的断点不同的是,条件断点具有触发条件,在需要设置的代码行的左侧右键选择添加条件断点,然后输入自己所需的条件表达式。

4.4 数据断点

数据断点,即检测某变量,在其更改时停止。通常可以在变量区右键所需变量,选择“值更改时中断”即可。添加的断点可以在断点窗口中删除。

4.5 记录点

在vscode中还可以添加记录点,和添加断点类似,在对应行左侧右键选择添加记录点即可,可以在运行到此行时在gdb调试窗口输出你所设置的消息。(注意输出在调试窗口或者说时gdb中,不是代码中的标准输出流)。

5. 跟踪进程 attach

attach功能主要针对未知死循环程序和多进程情况下的调试,可以附加在已经运行的程序上进行调试操作。

死循环为例,将示例代码修改如下并正确编译:

要附加调试,首先需要启动此程序,将其运行起来。然后选择配置好的“C/C++:(gdb) 附加”,在弹出的窗口中选择进程号。

选定之后即可开始调试,此时程序控制栏会出现一定的变化,原来的继续按钮变为暂停,停止按钮则为断开(此时vscode不控制程序结束)。

此时,你可以选择暂停程序,则可以看到出现死循环的地方,之后可以和普通调试类似操作即可。

如果你已经对程序有一定的预判,也可以根据自己的认知添加断点,程序将在你添加的断点处停止(如果可以)。


最后附上launch.json的代码,正常情况下你一定可以自己生成,没学会的也可以自己拷贝下去存成launch.json(所以你当我是在凑字数也没问题。。。)


vscode界面调试C++程序(linux)的评论 (共 条)

分享到微博请遵守国家法律