我目前正在我的新Linux笔记本电脑上设置VSCode以使用C++编码。现在我想尝试调试一个文本输入文件。然而,获取文本文件作为程序的参数比我想象的要困难得多。我想让程序像我在终端中输入./program.exe t2.txt
一样工作。
我花了2个小时研究如何在VSCode中做到这一点,并发现,我必须与launch.json有关。现在我修改了它,这样至少可以识别一个输入参数(花了2个小时)
{
"version": "0.2.0",
"configurations": [
{
"name": "C/C++: g++ build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": ["1","<","${workspaceFolder}/t2.txt"],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++ build active file",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
现在至少我的程序认识到,它得到一个参数作为输入,但我得到的错误,它不是一个文件?基本上,这个runtimeError是在我尝试运行程序时抛出的
std::ifstream file(filename); // open file
if (not file) {
throw std::runtime_error("Cannot open file.");
}
我做错了什么?
1条答案
按热度按时间fnatzsnv1#
通过重定向,你可以通过标准的输入流将文件“传递”给你的程序。参见Bash的文档)-而不是通过将文件名作为命令行参数传递给程序(在
argv
中可以使用)。命令行参数(
argv
)和标准输入流(std::cin
)是完全不同的东西。如果你想从
argv
获取文件名,并且他们打开了一个同名的文件,那么不要使用shell重定向(取出<
)。如果您想使用重定向,那么从std::cin
(标准输入流)读取文件内容。