catch块没有捕获异常

时间:2013-10-25 08:47:19

标签: c++ exception gdb

某处(是的,旧编译器gcc 4.0.1让我难过):

typedef std::tr1::shared_ptr<xmlpp::DomParser> PtrDomParser;

这是我的代码:

try{
    //here I'm using xml++ library to handle xml

    PtrDomParser parser = cdata_file_to_parser(responseFilePath);
    xmlpp::Document *response = parser->get_document();
    xmlpp::NodeSet nodeSet;
    xmlpp::Node *node;
    xmlpp::Element *root;
    typedef xmlpp::NodeSet::iterator It;

    root = response->get_root_node();

    //... some code ...
    throw Exception(); 
}
catch (const Exception &exc){
    std::cout << "Exception is captured!" << std::endl;
}
catch (...){
    std::cout << "Something else is captured!" << std::endl;
}

有事实:

1。每次流程达到“throw Exception();”时都会发生这种情况,大部分时间都会捕获异常。

2。有时当流程到达时(确实如此,100%)“抛出异常();” - 没有捕获异常,程序冻结,当我尝试使用gdb附加到程序并键入“where”时 - 我看到了:

  1. 0xb7fd8430在__kernel_vsyscall()
  2. 中 来自/lib/i686/libpthread.so.0的_lll_mutex_lock-wait()中的
  3. 0xb7d9bece
  4. 来自/lib/i686/libpthread.so.0的_L_mutex_lock_71()中的
  5. 0xb7d98500
  6. 0xbfbefab8在? ()
  7. 0x00000000 in ?? ()
  8. 0x00000000 in ?? ()
  9. 3。 gcc 4.0.1,gdb 6.3和我无法更新它们。

    5. xml ++库(https://developer.gnome.org/libxml++/

    6。嗯,程序使用了很多线程,我甚至不知道他们是如何工作的以及他们完全做了什么(我工作的大项目),但我知道,我不要使用任何可能导致此行为的共享变量或其他内容

    5. 嗯,我认为xmlpp析构函数有问题,但我不知道它是什么,我不知道如何跟踪它或如何弄清楚< / p>

    更新

    我没有找到问题所在,但有时我会遇到一个类似于第一个问题的问题(叹息......):

    当调用shared_ptr析构函数时,函数(另一个)结束后就会出现问题。

    再次,我附上了这个过程,键入“where”,gdb说:

    ========================

    __kernel_vsyscall()

    中的

    0)0xb7fd8430

    1)来自/lib/i686/libpthread.so.0的_lll_mutex_lock-wait()中的0xb7d9bece

    2)来自/lib/i686/libpthread.so.0的_L_mutex_lock_71()中的0xb7d98500

    ..不知道这里是什么,我只看到“..在??()”

    10)..在__gthread_mutex_lock

    11)..在__gthread_mutex_lock

    12)..在std :: tr1 :: _ Sp_counted_base :: release

    13)..在~shared_count

    14)..在~shared_ptr

    =======================

    看起来好像shared_ptr坏了吗? 而且,我惊讶地发现,当我使用std :: tr1 :: shared_ptr时,使用了boost_shared_ptr.h(gdb说,wtf?)

0 个答案:

没有答案