LINUX.ORG.RU

[c++] iterator exception

 


0

0

Доброго времени суток.
Подскажите пожалуйста может в std итератор (к примеру vector) выкидывать exception, как это проверить?какой имеено exception? как вообще от этого застраховаться.
Пример кода:


for (std::vector<XmlHelper::XmlNode>::iterator node = nodes.begin();
                    node != nodes.end(); node++)
                {
   try
                      { 
                      
 std::string str=node->getContent();
}
                      catch (...)
                     {
                       
.........
}
}
const char* XmlNode::getContent() const
{

    if (!m_node)
    {
        return 0;
    }
    xmlNode* node = m_node->children;

    while (node)
    {
        if (XML_TEXT_NODE==node->type)
        {
            char * str = reinterpret_cast<char*>(node->content);
            if (str)
            {
#ifdef DISABLE_CUSTOM_ESCAPE
                return str;
#else
                return XmlUtil::unescapeString(str);
#endif
            }
        }
        node = node->next;
    }
    return NULL;
}


getContent() = не выкидывает exception
а std::string str=node->getContent(); выкидывает
Почему? как отследить его?
Заранее огромное спасибо!

Итератор исключений не кидает. Максимум дебажный ассерт и тот в STLPort

placement_new ★★
()

1. Компилируешь свое приложение с -O0 -fno-inline -g
2. Запускаешь под gdb
3. Говоришь start, catch throw, run
4. gdb должен остановиться, когда дело дойдет до throw

linuxfan
()

> getContent() = не выкидывает exception

Чтобы это утверждать нужно видеть XmlUtil::unescapeString

anonymous
()

Если студийному компилятору задать ключик EHa, то try-catch будет ловить помимо C++ исключений еще и SEH-исключения.

anonymous
()

node->getContent() может вернуть NULL и тогда будет вам ecxeption std::logic_error.

kulti ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.