我有兩個開關,分別代表IPAddress和Port的'i'和'p'。BOOST程序選項命令行的格式是什麼?
命令行的格式是什麼?
我曾嘗試:
app -i192.168.1.1 -p12345
app -i 192.168.1.1 -p 12345
app -i=192.168.1.1 -p=12345
app -i='192.168.1.1' -p='12345'
app --IPAddress 192.168.1.1 --Port12345
我的應用程序具有與該ip地址的問題,並與DDD故障排除unrevealing我得到的虛擬機。
此外,該應用程序作爲守護進程運行,所以我的IP地址和端口的cout語句將被遺忘,並且打印到系統日誌會受到輸出值不是const char *的事實的阻礙。
我打算爲其他事情使用程序選項,但我對此有點頭痛。
po::options_description config("Configuration");
config.add_options()
("IPAddress,i","IP Address")
("Port,p","Port")
;
po::variables_map vm;
po::store(po::parse_command_line(ac, av, config),
vm);
po::notify(vm);
//...and this is how the values are used
int retval = getaddrinfo((vm["IPAddress"].as<string>()).c_str(),(vm["Port"].as<string>()).c_str(), &hint, &list);
下面是一個完整的程序......沒有什麼是印刷後「價值」控制檯:
#include <sstream>
#include <algorithm>
#include <stdlib.h>
#include <iterator>
#include <string>
//Using boost program options to read command line and config file data
#include <boost/program_options.hpp>
using namespace std;
using namespace boost;
namespace po = boost::program_options;
int main (int argc, char *argv[])
{
po::options_description config("Configuration");
config.add_options()
("IPAddress,i","IP Address")
("Port,p","Port")
;
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, config),vm);
po::notify(vm);
cout << "Values\n";
cout << (vm["IPAddress"].as<string>()).c_str();
cout << " " << (vm["Port"].as<string>()).c_str();
return 0;
}
是輸入值不知何故無法打印?
下面是GDB輸出,似乎是投的問題:
28 string address = (vm["IPAddress"].as<string>()).c_str();
(gdb) n
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_any_cast> >'
what(): boost::bad_any_cast: failed conversion using boost::any_cast
Program received signal SIGABRT, Aborted.
0x0000003afd835935 in raise() from /lib64/libc.so.6
而不是直接在您的後臺應用程序的工作,你爲什麼不建立一個獨立的測試用例爲此,以瞭解如何使用它隔離? – 2013-03-20 01:26:34
我曾想到這一點。我認爲這是一個很好的方法,因爲當前的設置有很多併發症測試。 – bentaisan 2013-03-20 02:15:14
張貼一些代碼請 – 2013-03-20 03:27:07