【发布时间】:2016-08-09 08:26:32
【问题描述】:
Program terminated with signal 11, Segmentation fault.
#0 0x000000340f87a31f in _int_malloc () from /lib64/libc.so.6
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.192.el6.x86_64 keyutils-libs-1.4-5.el6.x86_64 krb5-libs-1.10.3-57.el6.x86_64 libcom_err-1.41.12-22.el6.x86_64 libgcc-4.4.7-17.el6.x86_64 libselinux-2.0.94-7.el6.x86_64 libuuid-2.17.2-12.24.el6.x86_64 nss-softokn-freebl-3.12.9-11.el6.x86_64 openssl-1.0.1e-48.el6_8.1.x86_64 zlib-1.2.3-29.el6.x86_64
(gdb) where
#0 0x000000340f87a31f in _int_malloc () from /lib64/libc.so.6
#1 0x000000340f87abfc in malloc () from /lib64/libc.so.6
#2 0x00000000004a913b in UDataMemory_createNewInstance_54 ()
#3 0x00000000004a7ac7 in doLoadFromCommonData(signed char, char const*, char const*, char const*, char const*, char const*, char const*, char const*, signed char (*)(void*, char const*, char const*, UDataInfo const*), void*, UErrorCode*, UErrorCode*) ()
#4 0x00000000004a89cb in doOpenChoice(char const*, char const*, char const*, signed char (*)(void*, char const*, char const*, UDataInfo const*), void*, UErrorCode*) ()
#5 0x000000000045febd in icu_54::CollationRoot::load(UErrorCode&) ()
#6 0x000000000045ffe8 in icu_54::CollationRoot::getRootCacheEntry(UErrorCode&) ()
#7 0x000000000044b29a in icu_54::CollationLoader::loadTailoring(icu_54::Locale const&, UErrorCode&) ()
#8 0x000000000042d668 in icu_54::Collator::createInstance(icu_54::Locale const&, UErrorCode&) ()
#9 0x0000000000412691 in triagens::basics::Utf8Helper::setCollatorLanguage(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
#10 0x00000000004120aa in triagens::basics::Utf8Helper::Utf8Helper(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
#11 0x00000000004120ed in triagens::basics::Utf8Helper::Utf8Helper() ()
#12 0x0000000000414ac0 in __static_initialization_and_destruction_0 ()
#13 0x0000000000414ae9 in _GLOBAL__sub_I__ZN8triagens6basics10Utf8Helper17DefaultUtf8HelperE ()
#14 0x000000000050d5e6 in __do_global_ctors_aux ()
#15 0x00000000004085cb in _init ()
#16 0x00007fc223318068 in boost::system::native_ecat () from /home/workspace/DLL_CPPServer/Debug/libDLL_CPPServer.so
#17 0x000000000050d525 in __libc_csu_init ()
#18 0x000000340f81ecb0 in __libc_start_main () from /lib64/libc.so.6
以上代码是 GDB Infomation; triagens::basics::Utf8Helper::Utf8Helper() 没有被称为我的代码。首先,我认为它是由 3rdParty 库调用的,并且该方法存在于 3rdparty 的源中;但是当我搜索 utf8Helper 键时,我没有发现它被使用。
所以我不知道原因,你能帮帮我吗?
【问题讨论】:
-
核心转储一直在 malloc => 你很可能已经损坏了你的堆。使用 valgrind 或消毒剂查看它们是否发现问题。
-
当您在
malloc中发生崩溃时,原因很可能是您遇到了一些越界问题,可能是在分配的内存之外写入。使用Valgrind等工具帮助您发现此类问题。 -
我下载了Valgrind,用它来调试。但是错误信息与GDB的INFO类似;仍然没有错误位置信息;
-
您的代码没有直接调用该方法。崩溃发生在静态对象初始化期间。该调用是 ArangoDB 库的一部分吗?如果是这样,一种策略是编写一个简单的测试驱动程序并查看调用是否仍然失败。如果是这样,那么它是一个错误或更可能是一些配置问题。然而,更可能的是一些静态 ctor 或者您正在破坏堆。你有任何静态对象吗? valgrind 是否给出了有关内存写入错误、双重释放或其他与堆相关的错误的消息?如果是这样,那将是寻找的地方
-
@MatthewFisher 谢谢。是的,第三方是 ArangoDB 和 ActiveMQ,现在是 ArangoDB 产生的错误。经过我的测试,驱动程序正常。太奇怪了,我没有从 arangodb 定义全局/静态对象,只需使用 arangodb 中的“线程”类,在那里,我没有发现问题。