读书人

libconfig库中,readFile读了.cfg资料

发布时间: 2013-03-10 09:38:39 作者: rapoo

libconfig库中,readFile读了.cfg文件,但是却不能正确查找节点???
大牛们,在调试一个别人的程序,从linux移植来的,里边用到了libconfig库。

在调试的时候,发现总是中途退出,单步发现,一开始运行readFile时,就没有读对,存储.cfg文件的内存在执行readFile前后没有变化,捕捉异常也没有捕捉到
贴出代码,希望大牛们能帮忙解决

声明:

protected:
libconfig::Config m_configFile;

初始化,按照路径读入.cfg

Parameters::Parameters(const std::string& confFile) : m_filename(confFile)
{
try{
m_configFile.readFile(m_filename.c_str());
} catch (libconfig::ParseException& e) {
std::cout << "Error reading Configuration file (" << m_filename << ")!" << std::endl;
std::cout << "ParseException at Line " << e.getLine() << ": " << e.getError() << std::endl;
exit(EXIT_FAILURE);
} catch (libconfig::SettingException& e) {
std::cout << "Error reading Configuration file (" << m_filename << ")!" << std::endl;
std::cout << "SettingException at " << e.getPath() << std::endl;
exit(EXIT_FAILURE);
} catch (std::exception& e) {
std::cout << "Error reading Configuration file (" << m_filename << ")!" << std::endl;
std::cout << e.what() << std::endl;
exit(EXIT_FAILURE);
} catch (...) {
std::cout << "Error reading Configuration file (" << m_filename << ")!" << std::endl;
std::cout << "Unknown Exception" << std::endl;
exit(EXIT_FAILURE);
}
}

读Tracker.Name节点:
std::string seq_name = hp.readStringParameter("Tracker.Name");

跳到这里:执行完第四行之后,到14行执行,然后程序退出了就

std::string Parameters::readStringParameter(std::string param_name) const
{
try{
return std::string((const char*)m_configFile.lookup(param_name));
} catch (libconfig::ParseException& e) {
std::cout << "Error reading Configuration file (" << m_filename << ")!" << std::endl;
std::cout << "ParseException at Line " << e.getLine() << ": " << e.getError() << std::endl;
exit(EXIT_FAILURE);
} catch (libconfig::SettingException& e) {
std::cout << "Error reading Configuration file (" << m_filename << ")!" << std::endl;


std::cout << "SettingException at " << e.getPath() << std::endl;
exit(EXIT_FAILURE);
} catch (std::exception& e) {
std::cout << "Error reading Configuration file (" << m_filename << ")!" << std::endl;
std::cout << e.what() << std::endl;
exit(EXIT_FAILURE);
} catch (...) {
std::cout << "Error reading Configuration file (" << m_filename << ")!" << std::endl;
std::cout << "Unknown Exception" << std::endl;
exit(EXIT_FAILURE);
}
}



[解决办法]
GDB调试时,用layout regs命令看每句C/C++对应的汇编并单步执行观察相应内存和寄存器变化。

读书人网 >C++

热点推荐