`
russelltao
  • 浏览: 161224 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

终于解决了昨天AGENT++中的coredump问题

 
阅读更多

问题出在加载偶的动态库的进程,在偶服务初始化失败后,其进程并没有完全退出,这样在下一次的服务启动中,由于仍使用原进程,当初始化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++的使用还得注意啊。

分享到:
评论

相关推荐

    linux coredump分析方法实例介绍

    本文将通过实例来介绍 Linux 中如何进行 Core Dump 分析,解决死机问题。 一、Core Dump 介绍 Core Dump 是 Linux 系统中一种特殊的文件,它记录了系统崩溃或死机时的系统状态信息。Core Dump 文件可以帮助开发者...

    coredump问题原理探究-Linux x86版.rar

    本资料"coredump问题原理探究-Linux x86版"聚焦于Linux环境下,特别是x86架构下的核心转储文件分析,旨在帮助开发者深入理解core dump的工作机制,并提供有效的定位和解决问题的方法。 一、core dump的基本概念 1. ...

    window COREdump文件生成 c++代码

    Coredump文件包含了程序崩溃时内存中的关键信息,如进程的内存映射、全局变量、堆栈信息等,使得开发者能够定位到问题的具体位置,进而修复错误。本篇将详细介绍如何在C++代码中实现Windows系统的Coredump文件生成。...

    coredump文件调试

    在 C/C++ 程序中,数组越界或是访问空指针都会产生 SIGSEGV 信号,导致进程 crash,并产生 Core Dump 文件。为了调试 Core Dump 文件,可以使用 GDB 调试工具。GDB 是一个功能强大的调试工具,可以对 Core Dump 文件...

    Linux下生成core dump

    特别是对于开发人员来说,合理配置core dump文件的生成规则,能够大大提升故障排查的效率,从而更快地解决问题。同时,需要注意的是,在生产环境中,由于安全和隐私考虑,可能需要对core dump文件的生成进行更严格的...

    Coredump简介及使用

    总而言之,Coredump在Android和Linux系统中是一种重要的调试机制,能够帮助开发者深入理解程序在出错时的内部状态,对于定位和解决程序崩溃等棘手问题至关重要。通过合理配置和使用Coredump,开发者能够更加高效地...

    海思busybox+coredump

    海思busybox+coredump

    coredump文件的生成与解析.docx

    coredump 文件的生成与解析 coredump 文件是 Linux 操作系统中的一个重要概念,它记录了程序崩溃时的...通过对 coredump 文件的分析,可以了解程序崩溃的原因和函数调用路径,从而帮助开发者快速地定位和解决问题。

    容器中生成coredump文件

    如何在让docker中运行的进程生成core dump文件

    高通core dump解析工具

    总的来说,高通core dump解析工具是针对高通平台优化的调试辅助工具,能够帮助开发者快速定位和解决问题,提高软件的稳定性和质量。在实际开发过程中,结合日志、测试和代码审查,利用这类工具可以极大地提高故障...

    Accelerated Linux Core Dump Analysis

    Linux Core Dump 权威书籍

    GDB之在线调试与Coredump分析

    在线调试是在程序运行的过程中进行调试,而Coredump分析是在程序异常退出后,通过分析Coredump文件了解程序崩溃时的状态,以确定崩溃的原因。 在线调试是开发者在程序运行时进行调试的过程,可以实时查看程序的运行...

    coredump栈分析

    总结来说,`coredump栈分析`是调试过程中不可或缺的一部分,通过它,开发者能有效地定位和解决程序中的错误,提高软件的稳定性和可靠性。熟练掌握这一技能,对于提升IT专业人士的故障排查能力具有重要意义。

    Linux Debugging: coredump 分析入门的材料

    在IT行业中,Linux调试是一项...在实际工作中,结合日志、单元测试以及性能监控等手段,可以更全面地理解并解决问题。记住,理解`coredump`不仅有助于修复当前的错误,还能帮助预防未来可能出现的问题,提升软件质量。

    ubuntu-linux下程序崩溃生成coredump的方法.pdf

    ### Ubuntu Linux 下程序崩溃生成 Core Dump 的方法 #### 一、Linux 下 Core Dump 文件 **Core Dump 文件** 是一种在程序崩溃时由操作系统自动生成的文件,它包含了程序崩溃时刻的内存快照以及相关的系统信息。这...

    Linux Debugging(五): coredump 分析入門1

    在Linux系统中,调试是解决程序异常和错误的关键步骤,特别是在遇到程序崩溃并产生coredump时。coredump是操作系统在程序异常终止时保存的内存映像,包含了程序运行时的状态,如内存布局、堆栈信息、全局变量和...

    coredump使用

    通过上述步骤,我们可以有效地利用 coredump 文件来定位和解决程序中的错误。这对于提高软件质量和稳定性具有重要意义。正确地配置和使用 coredump 功能,不仅可以帮助开发者更快地找到问题根源,还可以避免因程序...

    AIX 下的 core dump 分析入门

    AIX 下的 core dump 分析入门.mht,html文档,请大家参考以下

    SegmentFault(coredump)调试方法.pdf

    总之,core dump调试是解决SegmentFault问题的关键步骤。通过理解如何获取gdb、生成未剥离的可执行文件、创建和使用core dump,以及在gdb中进行调试,开发者能够有效地定位和修复程序中的错误,提高软件的稳定性和...

    《coredump问题原理探究》windows版.rar

    总的来说,掌握core dump的分析技巧对于任何Windows CE开发者来说都是必要的技能,它不仅可以帮助我们快速定位并解决问题,还能让我们更深入地理解程序运行时的内部工作原理。通过学习和实践,我们可以提升自己的...

Global site tag (gtag.js) - Google Analytics