Не могу решитиь следующую проблему: Программа где-то на деструкторах или освобождении ресурсов вываливается с Unknown Error Не могу понять отчего это происходит. Последнее место, после чего обрывается - деструктор класса Features. Система - FreeBsd, язык - C++ Но в нем, вроде, все в порядке. Посоветуйте отчего может быть данная ошибка, где копать????
class Features {
private:
StringSet ftrscache;
void Cache()
{
if (ftrscache.empty())
{
try
{
string req_data;
SU(req_data = mgrExecXml("featurelist", (char*)0));
for (mgrRequestList ftrs(req_data); !ftrs.Eof(); ftrs.Next())
ftrscache.insert(ftrs.Name());
} catch (Error& e) {
Warning(("failed to get featurelist: %s",e.Message().c_str()));
}
}
}public:
~Features()
{
BackupLog(("DestrFeature"));
}
bool Has(const string& ftr)
{
Cache();
return (ftrscache.find(ftr) != ftrscache.end());
}
void AddToCache(const string& ftr)
{
ftrscache.insert(ftr);
}
} features ;
>Не могу решитиь следующую проблему: Программа где-то на деструкторах или освобождении ресурсов
>вываливается с Unknown Error Не могу понять отчего это происходит. Последнее
>место, после чего обрывается - деструктор класса Features.Раз вываливается, значит должен оставаться core файл. gdb вам в руки!
>>Не могу решитиь следующую проблему: Программа где-то на деструкторах или освобождении ресурсов
>>вываливается с Unknown Error Не могу понять отчего это происходит. Последнее
>>место, после чего обрывается - деструктор класса Features.
>
>Раз вываливается, значит должен оставаться core файл. gdb вам в руки!К сожалению он при этом не дампится, если вызвать ошибку Segmentation Failed тогда дампится, а при этой нет((
>Программа где-то на деструкторах или освобождении ресурсовОтладчик поможет найти точное место.
Ужасный код.
Если делаешь ООП дизайн приложения - делай, не пиши BackupLog() и SU().
Что это за ф-ии?Сделай конструктор тогда уж, если делаешь деструктор:
Features::Features() : ftrscache()
{}
Конструктор здесь совсем не нужно писать, компилятор его сам сделает. Деструктор тоже, его я, чтобы отлавить ошибку вставил. А BackupLog и SU это вообще макросы, и без них никуда. Если их не использовать повторяющегося кода быде такая куча!!!!
Если кому вдруг поможет, разобрался в чем дело. Оказалось одна из внешних функций генерировала исключение отличное от Error, а у меня исключения обрабатывались следующим образом.
try
{
......
}
catch(Error& e)
{
......
}
в итоге ошибка не обрабатывалась. Исправил наtry
{
......
}
catch(Error& e)
{
......
}
catch(...)
{
......
}
теперь все ок.