提升编程选项使我的应用崩溃
boost programming options crashes my app
当我使用此命令行时,为什么崩溃:" program -p 1"而不是" program -p 1"
我用VS 2008编译了它,并使用了Boost 1.51。
options_description desc("XXX");
desc.add_options()("p", value<std::string>(), "pi")
("s", value<std::string>(), "es");
std::cout << desc << std::endl;
variables_map vm;
store(parse_command_line(argc, argv, desc), vm);
notify(vm);
if (vm.count("p"))
cout << "p is: " << vm["p"].as<string>() << endl;
if (vm.count("s"))
cout << "s is: " << vm["s"].as<string>() << endl;
boost progam选项以 --
为默认选项启动字符序列。如果您想拥有'单字母'选项,以支持单个-
字符开始,则需要指定
desc.add_options()("p,p", value<std::string>(), "pi")
我猜该程序崩溃发生在您显示的代码行之后的某个地方。您应该调试(或使用其他cout
语句)以更准确地确定崩溃点。
好吧,它以联合国处理的例外崩溃:
Unhandled exception at 0x76dbc41f in test.exe: Microsoft C++ exception: boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::program_options::unknown_option> > at memory location 0x0018efd8..
它基本上无法识别您的-p
,因此阅读我发现该论点是长期参数的文档。这就是为什么它需要并与--p
一起使用。
这是一个修改的源(可编译)
#include <boost/program_options.hpp>
#include <iostream>
#include <string>
int main(unsigned int argc, const char** argv)
{
boost::program_options::options_description desc("XXX");
desc.add_options()
("p-arg,p", boost::program_options::value<std::string>(), "pi")
("s", boost::program_options::value<std::string>(), "es");
std::cout << desc << std::endl;
boost::program_options::variables_map vm;
boost::program_options::store(
boost::program_options::parse_command_line(argc, argv, desc), vm);
boost::program_options::notify(vm);
if (vm.count("p-arg"))
std::cout << "p is: " << vm["p-arg"].as<std::string>() << std::endl;
if (vm.count("s"))
std::cout << "s is: " << vm["s"].as<std::string>() << std::endl;
}
您需要放置例外处理try-catch
来处理未识别的程序选项,否则您可能会进一步崩溃。
相关文章:
- 我的应用程序无法在安卓上使用OpenSSL进行链接
- 我的 c++ 应用程序中的运行时间从 0 增加到 60 太快了(例如一毫秒或一微秒)
- 设置我的应用程序 API 感知并防止系统使其模糊和错误定位
- 是否可以将不同的编译器嵌入到我的应用程序中?
- 在我的应用逻辑中找不到错误
- 即使在我为我的应用程序授予管理员后也无法从 Windows 系统复制目录
- 计算有多少人执行我的C++应用程序
- 为什么我的 C# 应用程序无法加载我的 C++ dll?
- 是否可以将 VBA 编程环境添加到我的C++应用程序?
- 从另一个应用启动我的应用时出现相对路径更改问题
- 指定在用户固定我的应用程序时用于运行应用程序的命令参数
- LOCAL_SHARED_LIBRARIES使我的应用程序崩溃
- 为什么使用 nullPtr 调用函数不会使我的应用程序崩溃
- 当我尝试将一个向量元素的值分配给另一个向量元素时,为什么我的应用程序会崩溃
- 为什么Linux报告了我的应用程序的内存使用情况
- 如何使用Qt读取我的应用程序屏幕像素数据
- 为什么我的应用程序即使我的应用程序也关闭,即使我有cin.get();
- 需要知道 Windows API 才能在我的应用程序激活时获取回调
- dll中的vector.h在我的应用中不可用
- 为什么我的 C++ 应用以退出值 -1 终止,但某些代码逻辑未执行?