关于C++中使用zookeeper,get数据的时候报的错

hsszhang 2015-10-12 04:30:12
工作使用的是虚拟机,前段时间虚拟机重新分配,将zookeeper相关拷贝到了新的虚拟机上。

#include <string>
#include <BtLog.hpp>
#include <ZooKeeper.hpp>

int main(int argc, char** argv)
{
BTLOG_INIT("test.log", btlog::CBtLogger::DEBUG, true);
BTLOG_DEBUG("zk test start");
std::string zkHosts = "192.168.1.66:2182";
CZooKeeper zk;
zk.setHostList(zkHosts);
if (!zk.connect())
{
std::cerr << "connect to zk failed" << std::endl;
return false;
}
else
{
std::cout<< "connetc successed" << std::endl;
}

std::string path = "/card/lc/";
CAMFType pRet = zk.get(path, false);

CAMFObject& ret = pRet;
std::string err = ret["err"];
if (err != "ok")
{
std::cerr << "get config for path " << path << " failed:" << err << std::endl;
return false;
}
CAMFObject& config = ret["value"];
std::string configData = config["config.xml"].toString();

std::cout << configData << std::endl;

return 0;
}

问题出现在红字所标示的地方,断点后有如下错误日志
connetc successed

Program received signal SIGSEGV, Segmentation fault.
0x000000000040e957 in CZooKeeper::get (this=Cannot access memory at address 0x7fffff63a198

关键是如果用以前的虚拟机(有的同事的机器没有更换)获取该虚拟机上的信息是可以连接和正常执行,说明现在的zookeeper是可用的。
其他相关信息:
执行失败的机器的信息ZOO_INFO@log_env@670: Client environment:os.arch=3.10.0-123.el7.x86_64
执行成功的机器的信息ZOO_INFO@log_env@670: Client environment:os.arch=2.6.32-71.el6.x86_64

问题有些怪异,哪位大神遇到过类似问题或者提供一个解决方向。
...全文
222 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-10-12
  • 打赏
  • 举报
回复
建议在新环境下重新生成项目。

进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’
使用命令
gdb 运行程序名 core或core.数字
进入gdb然后使用bt命令
可以查看进程意外退出前函数调用的堆栈,内容为从上到下列出对应从里层到外层的函数调用历史。
如果进程意外退出不产生core文件,参考“ulimit -c core文件最大块大小”命令

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧