提升编程选项使我的应用崩溃

boost programming options crashes my app

本文关键字:我的 应用 崩溃 选项 编程      更新时间:2023-10-16

当我使用此命令行时,为什么崩溃:" 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来处理未识别的程序选项,否则您可能会进一步崩溃。