使用Visual Studio code Ubuntu调试c++代码

Debugging a c++ code with Visual Studio Code Ubuntu

本文关键字:调试 c++ 代码 Ubuntu code Visual Studio 使用      更新时间:2023-10-16

大家晚上好,我试着在ubuntu:中的visual studio代码中调试这个小程序

#include <string>
#include <iostream>
int main(int argc, char* argv[]) 
{
std::string folder = argv[1];
}

但调试终止时终端中出现此错误:

"在抛出'std::logic_error'的实例后调用terminate"what((:basic_string::_M_construct null无效">

在调试控制台中:

"无法打开"raise.c":无法读取文件(错误:找不到文件(/build/glibc-4WA41p/glibc-2.30/sysdeps/unix/sysv/linux/request.c((。">

所以问题是:

1( 是否可以显示发生错误的行的编号?(在这种情况下,第6行(

2( 为什么会出现这种错误,以及如何避免这种错误?

3( 为了避免这个问题,我可以写,例如:

string folder = "/home/lorenzo/Images";

但我不想那样做。为了从我写的终端"运行"程序/main/home/lorenzo/Images,所以我以这种方式将文件夹传递给程序。在不直接在程序中写入文件夹或使用cin的情况下,是否可以在解编译时做同样的事情?

提前感谢!

如果你想用VS代码进行调试,你必须为每个项目进行一个设置,但在设置完成后,这很简单。

如果您还没有安装gdb。然后,您需要在调试面板中选择一个配置。可在此处找到说明。至少使用-g编译程序。我更喜欢在-O0中添加以最小化优化。

一旦设置好,现在就可以使用VS代码进行调试了。现在,[希望]回答你的问题。

  1. gdb可以对某些分割错误执行此操作;通常情况下,您需要学习如何自己完成代码
  2. 我试着编译并运行你的程序,它运行得很好。可执行文件的名称是main吗?我使用gcc 5.5在Debian上编译。我没有命名我的可执行文件,所以我的调用看起来是这样的:
    ./a.out /home/sweenish/tmp。既然我的没有失败,我在这里不能提供太多帮助。但是你的编译器说一个文件不存在您是否安装了构建必备软件包
  3. 是的,您可以通过在VSCode项目的launch.json文件中添加选项来自动执行额外的参数

这里有一个简短的例子:

#include <string>
#include <iostream>
int main(int argc, char* argv[]) 
{
std::string folder = argv[1];
std::cout << folder << 'n';  // Set a breakpoint here
}

我为您的示例添加了一行额外的代码。单击行号左侧设置断点,会出现一个红色圆圈。

{
// See https://go.microsoft.com/fwlink/?LinkId=733558 
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "g++ build active file",
"command": "g++",
"args": [
"-Wall",
"-std=c++17",
"-g",
"-O0",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "/home/linuxbrew/.linuxbrew/bin"
},
"problemMatcher": [
"$gcc"
],
"group": "build"
}
]
}

这是一个稍微修改过的自动生成任务。我添加了-Wall-std=c++17-O0。这个文件是tasks.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": "g++ build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [
"/home/lorenzo/Images"
],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "g++ build active file",
"miDebuggerPath": "gdb"
}
]
}

这是自动生成的launch.json。请注意,我添加了path参数。调试器将始终使用该参数进行调用,从而为您节省一些键入。

然后,当我的C++文件处于活动状态时,我点击调试面板中的"播放"按钮,它将为我编译并启动调试器-exec print argv[1]打印我用作程序参数的文件路径。