我写了一个程序

  • 每20秒
  • 当运行该代码段的特定请求到来时。
  • 每1分钟。

  • 上面列表中的1和3是两个不同的实例,可以重叠。

    程序

    麻烦的功能签名。
    bool ProcessInfoHandler::getCPUInfo (rsc::ProcInfo &procInfo, bool isThreadCall)
    

    运行该程序大约3天后,我遇到了下面提到的崩溃。
    #2  0x000000000041fdb8 in sn_sig_handler (signum=6, siginfo=0x451a7d80, undocumented=    <value optimized out>) at common/main/sn_proc_main.cpp:109
    #3  <signal handler called>
    #4  0x00000031d9630265 in raise () from /lib64/libc.so.6
    #5  0x00000031d9631d10 in abort () from /lib64/libc.so.6
    #6  0x00000031d966a84b in __libc_message () from /lib64/libc.so.6
    #7  0x00000031d967230f in _int_free () from /lib64/libc.so.6
    #8  0x00000031d967276b in free () from /lib64/libc.so.6
    #9  0x00000000004367a5 in deallocate (this=0x66cff0, __position=..., __x=<value optimized out>)
    at /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/ext/new_allocator.h:94
    #10 _M_deallocate (this=0x66cff0, __position=..., __x=<value optimized out>) at /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:133
    #11 std::vector<cpu_instance_data_t, std::allocator<cpu_instance_data_t> >::_M_insert_aux (this=0x66cff0, __position=..., __x=<value optimized out>)
    at /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/vector.tcc:299
    #12 0x0000000000431f8e in ProcessInfoHandler::getCPUInfo (this=<value optimized out>, procInfo=..., isThreadCall=false)
    at /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:610
    #13 0x00000000004333be in ProcessInfoHandler::getProcessInformation (this=0xc16f9c0, procInfoSeq=..., isThreadCall=false) at processinfohandler.cc:255
    

    我的问题
  • 与第13帧不同,在第13帧中给出了文件名和行号,第12帧没有给出该信息。这是否意味着通过 vector 传递引用存在问题?
  • 关于我应如何继续调试此特定堆栈跟踪的任何指针?

  • 由于专有原因,无法提供getCPUInfo的代码。请建议是否有解决方法。

    最佳答案

    调用std::vector<>::_M_insert_aux()表示正在getCPUInfo中修改了 vector -如果可以同时(在多个线程上)调用此代码(这是您的“3列表”所隐含的),那么您需要使用互斥锁等内容来同步线程。
    std::vector不是线程安全的。

    09-30 23:15
    查看更多