Определение переменной в классе вызывает случайный сбой во время выполнения приложения.
Сбой не появляется в режиме отладки, это происходит только в сборке выпуска.
Это такжебывает в различной точке исполнения.Я время от времени выдаю журналы во время выполнения, и они время от времени будут различаться.
Рассматриваемый класс является средним в цепочке наследования:
class Base
{
public:
virtual ~BaseClass() { }
// Quite a few virtual methods declared here.
};
class Middle : public Base
{
public:
virtual ~Middle() { }
protected:
Middle(const std::string& name)
: _name(name)
, _db(Context::DbInstance())
{
}
/**
* Commenting out any of the following crashes or does not.
*/
// CareTaker* _careTaker; // 4 bytes, crashes.
// void* dummy; // 4 bytes, crashes.
// int dummy; // 4 bytes, crashes.
// short dummy; // 2 bytes, crashes.
// class Dummy {}; // 1 bytes, does not crash.
// // 0 bytes, member removed, does not crash.
std::string _name;
// Crash also happens/does not if a variable described above put here.
Database& _db;
// But not if it is here. Variable of any size is OK here.
};
class Derived : public Middle
{
public:
Derived() : Middle("Foo") { }
virtual ~Derived() { }
// Some virtual methods from Base overriden here.
};
В двух словах, если переменная размера 2 или более предшествует определению Database& _db
, произойдет сбой.Если это произойдет впоследствии, они не будут.
Как я собираюсь попытаться решить проблему с отказом, не имея доступа к отладчику в этом сценарии?
РЕДАКТИРОВАТЬ:
Класс используется в методе инициализатора, запускаемом после загрузки DLL.К сожалению, я не могу дать больше подробностей, чем это.
int DllInitializer()
{
// Complex code.
DbPlugger::instance().addPlug(new Derived());
// Complex code.
}