我可以在调试模式下停止 Visual Studio URL 解码命令参数吗?
Can I stop Visual Studio URL decoding Command Arguments in Debug mode?
如果我将我的程序设置为在 Visual Studio 调试器中使用命令参数 "https%3a%2f%2fas" 回显命令参数和 运行 它将回显 'https://as'
但是,如果我从命令行 运行 'myprog.exe https%3a%2f%2fas' 然后它会回显 'https%3a%2f%2fas'
为什么它的处理方式不同,我该如何阻止它?我必须传递一个 URL 编码的参数,它不需要首先被 Visual Studio 解释。
程序是 C++,如果有帮助的话,它是 Visual Studio 2017。
Can I stop Visual Studio URL decoding Command Arguments in Debug mode?
抱歉,恐怕答案是否定的。这个问题在我测试后确实存在,据我所知现在 VS 中没有选项可以关闭或控制此行为。为此,我建议您可以Go Help=>Send Feedback=>Report a problem in VS
到report this issue到产品团队。
I have to pass in an argument that is URL encoded and it needs to not
be interpreted by Visual Studio first.
并且因为它在 command-line 中运行良好。所以你需要的是在开发的VS debug process
期间获取UrlEncode格式字符串。为此,您可以尝试:
1。在需要 UrlEncode 的真正参数之前添加一些代码 argv[1]
(我认为是 https://as
)。关于如何做UrlEncode见this issue.
2。这样设置参数,在项目属性中将https% 3a% 2f% 2fas
设置为argv[1]
而不是https%3a%2f%2fas
,然后添加代码判断是否包含space,if true
=>编写代码去掉里面的space得到一个你想要的新字符串(https%3a%2f%2fas
)
3。配置您的自定义参数文件:
1# 在 vs 中,right-click 项目=>添加一个 Text.txt 文件到项目中。
2# 设置这里唯一的参数为Text.txt
.
那么你的Text.txt的内容就是你自定义参数的集合。
例如:
在Text.txt文件的第1行是https%3a%2f%2fas
,第2行是test
,第3行是...
3# 然后你可以使用这样的代码:
#include "pch.h"
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main(int argc, char* argv[])
{
ifstream infile(argv[1]); //open the file
string MyArgus[10]; //create my alternative argus
MyArgus[0] = argv[0]; //let the first argu of Myargus=original vs argu[0]
if (infile.is_open() && infile.good()) {
cout << "File is open."<<endl;
string line = "";
int num = 1;
while (getline(infile, line)) {
MyArgus[num] = line;
num++;
}
}
else {
cout << "Failed to open file..";
}
cout << MyArgus[0]<<endl; // projectName.exe always
cout << MyArgus[1]<<endl; // https%3a%2f%2fas
cout << MyArgus[2]<<endl; // test
return 0;
}
因此您可以在Text.txt文件中以这种方式编写参数来设置自定义参数以避免VS中的自动UrlDecode。
希望对您有所帮助:)
如果我将我的程序设置为在 Visual Studio 调试器中使用命令参数 "https%3a%2f%2fas" 回显命令参数和 运行 它将回显 'https://as'
但是,如果我从命令行 运行 'myprog.exe https%3a%2f%2fas' 然后它会回显 'https%3a%2f%2fas'
为什么它的处理方式不同,我该如何阻止它?我必须传递一个 URL 编码的参数,它不需要首先被 Visual Studio 解释。
程序是 C++,如果有帮助的话,它是 Visual Studio 2017。
Can I stop Visual Studio URL decoding Command Arguments in Debug mode?
抱歉,恐怕答案是否定的。这个问题在我测试后确实存在,据我所知现在 VS 中没有选项可以关闭或控制此行为。为此,我建议您可以Go Help=>Send Feedback=>Report a problem in VS
到report this issue到产品团队。
I have to pass in an argument that is URL encoded and it needs to not be interpreted by Visual Studio first.
并且因为它在 command-line 中运行良好。所以你需要的是在开发的VS debug process
期间获取UrlEncode格式字符串。为此,您可以尝试:
1。在需要 UrlEncode 的真正参数之前添加一些代码 argv[1]
(我认为是 https://as
)。关于如何做UrlEncode见this issue.
2。这样设置参数,在项目属性中将https% 3a% 2f% 2fas
设置为argv[1]
而不是https%3a%2f%2fas
,然后添加代码判断是否包含space,if true
=>编写代码去掉里面的space得到一个你想要的新字符串(https%3a%2f%2fas
)
3。配置您的自定义参数文件:
1# 在 vs 中,right-click 项目=>添加一个 Text.txt 文件到项目中。
2# 设置这里唯一的参数为Text.txt
.
那么你的Text.txt的内容就是你自定义参数的集合。 例如:
在Text.txt文件的第1行是https%3a%2f%2fas
,第2行是test
,第3行是...
3# 然后你可以使用这样的代码:
#include "pch.h"
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main(int argc, char* argv[])
{
ifstream infile(argv[1]); //open the file
string MyArgus[10]; //create my alternative argus
MyArgus[0] = argv[0]; //let the first argu of Myargus=original vs argu[0]
if (infile.is_open() && infile.good()) {
cout << "File is open."<<endl;
string line = "";
int num = 1;
while (getline(infile, line)) {
MyArgus[num] = line;
num++;
}
}
else {
cout << "Failed to open file..";
}
cout << MyArgus[0]<<endl; // projectName.exe always
cout << MyArgus[1]<<endl; // https%3a%2f%2fas
cout << MyArgus[2]<<endl; // test
return 0;
}
因此您可以在Text.txt文件中以这种方式编写参数来设置自定义参数以避免VS中的自动UrlDecode。
希望对您有所帮助:)