在 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) 传递?
在 Visual Studio 中使用命令行输入文本进行调试