终于解决了昨天AGENT++中的coredump问题
来源:互联网 发布:node.js对php的冲击 编辑:程序博客网 时间:2024/04/28 00:50
问题出在加载偶的动态库的进程,在偶服务初始化失败后,其进程并没有完全退出,这样在下一次的服务启动中,由于仍使用原进程,当初始化MIB时,就有下面的问题:
void Mib::construct(const OctetStr& path)
{
... ...
#ifndef STATIC_REQUEST_LIST
requestList = 0;
#endif
#ifdef _SNMPv3
bootCounterFile = DEFAULT_ENGINE_BOOTS_FILE;
#ifdef _PROXY_FORWARDER
if ((requestList) && (requestList->get_v3mp()))
requestList->get_v3mp()->get_local_engine_id(myEngineID);
#endif
#endif
... ...
}
大家注意这句:if ((requestList) && (requestList->get_v3mp()))。实际的coredump就发生在这。
可以看到在agent++.h中,硬性定义了宏
#define _PROXY_FORWARDER
所以这句会执行。同时,由于我的工程在编译时加入了STATIC_REQUEST_LIST宏,所以requestList = 0;不会被执行,这样requestList如果指向非法内存就会coredump。而且,由于这个宏的存在,请看mib.h文件中requestList的定义:
#ifndef STATIC_REQUEST_LIST
RequestList* requestList;
#else
static RequestList* requestList;
#endif
显然requestList是个静态全局变量。
这样在启动过程中,恰好刚初始化MIB完成时,依赖的FM服务被KILL掉,找不到该服务,服务启动失败,做完清理工作后,这时静态指针requestList已经不为空。但进程并没有完全结束,导致该变量仍然有值存在,但实际却已指向无效内存。所以在下次启动后,加载偶服务动态库,就会在agent++中coredump。
较隐蔽的问题,多个原因导致了coredump,解决办法是服务启动失败后如果进程不结束,必须将Mib中的requestList指针置为空。看来对agent++的使用还得注意啊。
- 终于解决了昨天AGENT++中的coredump问题
- 终于解决昨天的问题了
- 昨天发现ASP中的一个问题,终于找到问题所在了
- 昨天开始安装SDK,出现问题一直不能成功,终于解决了
- 问题终于解决了
- 郁闷,这个问题从昨天到今天终于解决了
- 终于解决了PHP调用SOAP过程中的种种问题
- 终于解决了PHP调用SOAP过程中的种种问题
- Linking 问题终于解决了.
- 终于解决了TNS问题!
- CLOSE_WAIT问题终于解决了
- 终于解决了一点问题
- 昨天终于签约网络中心了
- 终于解决了这个怪问题
- 终于解决了这个怪问题
- 问题终于解决了……
- ruby的奇怪问题~~~终于解决了.!
- 终于解决了session问题,总结!
- 框架内调用跨站网页的SESSION会丢失!
- 简单的两库同步触发器
- Hash 算法详解
- 热门的IT十大职位
- 国内“软件蓝领”:软件工程师 前景看好
- 终于解决了昨天AGENT++中的coredump问题
- 安装与卸载之卸载篇——程序自杀
- 部署数据层的配置文件(app.config)
- 钩子注入程序
- 十条减少软件缺陷的真经
- 今儿个开张了。。。。。
- 一场永远不可能赢的“战争”
- 终于找到关于POJO这个词的准确意思了
- 第一次数据结构实习。。。