Ubuntu上可视化调试前端软件之VScode

本文目的是在Ubuntu系统使用gdb调试程序的基础上,练习使用可视化调试前端软件VScode调试程序。

(一)安装并配置VScode

1.安装VScode

  • 方法一
    直接在Ubuntu系统自带的Ubuntu软件安装Visual Studio Code
  • 方法二
    命令行安装Visual Studio Code
  • 安装好VScode后如图所示
    welcome

2.配置VScode编译C/C++的环境

  • 安装C/C++插件
    C/C++
    在VScode的左边扩展(Ctrl+Shift+X)处搜索C/C++并安装它(我这里已经安装好了C/C++)。
  • 安装Chinese (Simplified) Language Pack for Visual Studio Code插件
    这个插件可以使VScode显示简体中文,方便使用

3.配置VScode调试C/C++的环境

  • 首先,新建vscode_program文件夹作为VScode的工作目录。(注意文件路径和文件名不能有中文,否则会报错。)
  • 在VScode中打开该文件夹(即工作目录)并新建子文件夹test存放编写的程序和生成的可执行文件,然后再新建一个C语言程序RevertNum.c。
    new_c
  • 配置程序调试环境
    • 首先启动调试(F5)
      run_first
    • 然后选择环境
      choose
    • 最后选择配置
      choose2
    • 报错如下:
      err1
      • 从图中可以看出生成的可执行文件的路径为./vscode_program/RevertNum而不是./vscode_program/test/RevertNum
        ans1
      • 原因如下:
        由于tasks.json中的命令type类型为cppbuild时会使编译以进程运行而不是以shell命令运行,因此type配置为cppbuild将会生成的文件放到根目录(工作目录)下,而改为shell会生成到当前目录下。
    • 继续调试程序,程序正常运行
      run_success
      • 若想要调试程序时显示外部窗口则需要将 launch.json中的externalConsole属性改为true,显示效果如下:
        run_window
      • 此时发现输出中有多余的类似[1] + Done "/usr/bin/gdb" --interpreter=mi --tty=${DbgTerm} 0<"/tmp/Microsoft-MIEngine-In-36xb7mwq.voj" 1>"/tmp/Microsoft-MIEngine-Out-t93wyo8f.xxh"的内容输出,查阅网上资料2说这是正常的输出信息,忽略即可。
      • 此时终端输出如下警告:
        如果想要去掉该警告,则需在tasks.json中修改presentation的属性panel为new即可解决3
        err2
  • 修改的launch.json文件和tasks.json文件4
    • launch.json文件修改如下:
    {
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "gcc - 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,   //是否显示外部调试窗口
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: gcc build active file",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
    }
    
    • tasks.json文件修改如下:
    {
    "tasks": [
        {
            "type": "shell",     配置为cppbuild将会生成的文件放到根目录下,而改为shell会生成到当前目录下
            "label": "C/C++: gcc build active file",
            "command": "/usr/bin/gcc",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "/usr/bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Generated task by Debugger",
            "presentation": {
                "echo": true,
                "reveal": "always",
                "focus": false,
                "panel": "new",      //这里shared表示共享,改成new之后每个进程创建新的端口
                "showReuseMessage": true,
                "clear": true
            }
        }
    ],
    "version": "2.0.0"
    }
    

(二)使用VScode进行程序的调试

1.调试程序

  • RevertNum.c
#include<stdio.h>

//  函数作用:输出反转的数
void ShowRevertNum(int Num)
{
	while(Num>10)
	{
		printf("%d",Num%10);
		Num/=10;
	}
	printf("%d\n",Num);
}

int main()
{
	int n;
	printf("Please input a number:");
	scanf("%d",&n);
	printf("After Revert:");
	ShowRevertNum(n);
	return 0;
}
  • 程序运行时的问题
    当程序输入100时输出为010,正确输出应为001。运行结果如下:
    err3

2.启动调试

  • 添加断点
    • 将鼠标放在程序所在行的左边即可看见暗红色的小圆点,单击它即可设置断点。
      Breakpoint
    • 设置如下三个断点
      Breakpoint3
  • 开始调试
    利用上方的继续、单步跳过、单步调试、单步跳出等可视化方式调试该程序。
    • 当程序停在第一个断点时,Num的值为100
      break1
    • 当经过一轮while循环后Num的值变为10,此时Num>10不成立直接跳过while循环。
      break11
    • 到达第三个断点时,直接输出Num的值,此时Num值为10。
      break3
    • 调试结束
      end

3.修改程序

将RevertNum.c中的while循环中判断条件改为Num>=10即可。成功运行如下:
sucess

(三)总结

之前直接使用gdb进行C程序的调试中让我从底层了解了gdb调试程序的过程,而使用VScode调试程序则让我从更高的层次调试程序,工作效率有了显著提升;通过可视化的调试软件,可以不用再去记忆复杂繁多的调试命令,而是直接使用鼠标可视化操作进行程序的相关调试,极大地提高了生产力。

感谢以下博客和文章对我的帮助:


  1. https://www.cnblogs.com/lwp-king666/p/10513382.html ↩︎

  2. https://github.com/microsoft/vscode-cpptools/issues/3298 ↩︎

  3. https://blog.csdn.net/qq_30467819/article/details/105697823 ↩︎

  4. https://segmentfault.com/a/1190000020793997?utm_source=tag-newest ↩︎

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要在 Ubuntu 上使用 VS Code 调试 OpenMPI 代码,需要安装以下软件: 1. OpenMPI 2. MPI Debugger (MPIDB) 3. VS Code 4. C/C++插件 5. C/C++ Debug插件 安装 OpenMPI 和 MPIDB 在终端中运行以下命令来安装 OpenMPI 和 MPIDB: ``` sudo apt install openmpi-bin libopenmpi-dev mpich mpich-doc ``` 安装 VS Code和插件 在 Ubuntu 上安装 VS Code 的方式有多种,可以从官网下载 .deb 安装包,也可以通过终端使用 snap 进行安装。安装完成后,在 VS Code 中安装 C/C++ 和 C/C++ Debug 插件。 配置 VS Code 调试 打开 VS Code,新建一个 C++ 工程。在工程根目录下创建一个名为 `.vscode` 的文件夹,并在该文件夹下创建一个名为 `launch.json` 的文件。 在 `launch.json` 中添加以下配置: ``` { "version": "0.2.0", "configurations": [ { "name": "Debug MPI Program", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/<your-binary>", "args": ["-np", "4", "<your-args>"], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, "linux": { "MIMode": "gdb", "miDebuggerPath": "/usr/lib64/openmpi/bin/mpirun", "miDebuggerArgs": ["-np", "4", "-hostfile", "${workspaceFolder}/hostfile", "--debugger", "gdb", "--launch", "<your-binary>"] } } ] } ``` 其中: - `program`:指定要调试的可执行文件路径。 - `args`:指定要运行的进程数和其他参数。 - `miDebuggerPath`:指定 MPI 运行器的路径。 - `miDebuggerArgs`:指定 MPI 运行器的参数。 在上面的配置中,将 `-hostfile` 参数设置为 `${workspaceFolder}/hostfile`,则需要在工程根目录下创建一个名为 `hostfile` 的文件,并在该文件中指定要运行程序的主机名和进程数。例如: ``` localhost slots=2 192.168.1.100 slots=2 ``` 运行调试 按下 F5 键运行调试,VS Code 将启动 MPI 运行器,并使用 GDB 进行调试。你可以在调试面板中查看程序的输出和调试信息。 希望这些步骤可以帮助你在 Ubuntu 上使用 VS Code 调试 OpenMPI 代码。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值