在 Visual Studio 调试命令参数中转义

Posted

技术标签:

【中文标题】在 Visual Studio 调试命令参数中转义【英文标题】:Escaping in Visual Studio debugging command arguments 【发布时间】:2017-12-27 12:01:04 【问题描述】:

我试图在 Visual Studio 的调试会话期间将命令行参数 <(单尖括号,不带引号)传递给 C++ 程序。如Project settings for a C++ debug configuration 中所述,< 作为重定向运算符具有特殊含义,但并未指定如何对其进行转义。我试过使用"<"^<,但它们都没有做我想要的。使用 "<" 参数从命令行调用命令按预期工作。

所以看起来调试命令参数首先被预处理。有什么方法可以让字符从这个预处理中逃脱?

【问题讨论】:

请给出您想要使用的完整命令行(“ < 之所以有效,是因为它不是参数,而是重定向运算符。它实际上不会将参数传递给您的可执行文件。正如我在问题中所说,我想传递一个参数 - < 字符串。 正如我所说:它对我有用。当我输入“ 对不起,我的错。我想通了,看看我的答案。谢谢! 对于那些被搜索引擎带到这里的人,我认为这里有一个真正的问题:code.visualstudio.com/docs/cpp/launch-json-reference 说“如果您要转义字符,则需要双重转义它们。例如, ["\\\"arg1\\\": true"] 会将 "arg1": true 发送到您的应用程序。”但请注意,它的示例要么是三次转义(我没有尝试过),要么是反斜杠和引号的单次转义。单、双或三重转义都不适合我。 【参考方案1】:

如果使用“开始调试”,似乎传递"<" 有效。我使用的是“Start without Debugging”,因此可以通过将 "<" 传递给空的控制台应用程序并调用“Start without Debugging”来重现问题。

“Start without Debugging”似乎实际上调用了 cmd.exe,因此命令参数受命令行解释规则的约束。那么问题就变成了如何在命令行中转义<< 外部双引号可以使用^< 转义,但我仍然不知道如何在双引号内转义<

我必须说,调试命令参数的解释取决于程序的启动方式而受到不同规则的约束,这有点令人惊讶。

【讨论】:

非常有趣。我可以在这里重现,但没有解决方案。最好在 MS 社区网站上提问(或许可以在此处重新发布答案)。 @Igor Akhmetov,感谢您在这里分享您的解决方案,如果可能,您可以将其标记为答案。此外,使用“不调试启动(Ctrl+F5)”和“开始调试(F5)”,我们也得到与您相同的结果。对于这个问题,就像 Werner Henze 的建议一样,您可以将其报告给社区网站:developercommunity.visualstudio.com/spaces/8/index.html。感谢您再次分享您的解决方案。祝你有美好的一天:)

以上是关于在 Visual Studio 调试命令参数中转义的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 2015 调试中将“%”符号作为命令行参数 (argv) 传递?

在 C# 中转义命令行参数

在 Visual Studio 中使用命令行输入文本进行调试

Visual Studio配置:项目属性页-调试

在 Visual Studio 2010 中传递命令行参数?

运行调试器 Visual Studio 时 argv 中的 PATH