Russian Qt Forum

Qt => Общие вопросы => Тема начата: demaker от Декабрь 25, 2013, 10:21



Название: Ошибка(код ошибки 255)
Отправлено: demaker от Декабрь 25, 2013, 10:21
Пытаюсь поймать ошибку, запускаю программу через отладчик все норм.
Как только запускаю без отладчика, то вылетает с кодом ошибки 255


Название: Re: Ошибка(код ошибки 255)
Отправлено: Bepec от Декабрь 25, 2013, 10:33
Попробуйте запустить её ещё раз. Наверно код ошибки будет 255 :D

PS код, господа, код. Кодом всё можно решить.


Название: Re: Ошибка(код ошибки 255)
Отправлено: demaker от Декабрь 25, 2013, 10:42
Но это тяжелее, т.к. у меня программа работает непосредственно с устройством.
В дебаге не вылетает, поэтому я не могу никак найти на каком из этапов происходит fail.


Название: Re: Ошибка(код ошибки 255)
Отправлено: Serr500 от Декабрь 25, 2013, 10:57
Варианты.
1) Многопоточность. Что-то при работе под отладчиком успевает инициализироваться, а без отладчика - нет.
2) При работе с устройством под отладчиком работа медленнее и устройство успевает ответить на запрос программы.
3) Отладчик ухитряется чистить какие-то регионы памяти, а при работе без отладчика в них мусор.


Название: Re: Ошибка(код ошибки 255)
Отправлено: demaker от Декабрь 25, 2013, 10:58
Еще тогда такой вопрос.
Вот работаю с Model-View-(View Model).

Добавляю элементы в дерево.
Отображаю их в общей структуре ,и при выделении элемента в дереве, отображаются его дочки в листе.

Иногда происходит так, что при добавлении элемента в общую структуру он не отображается.
А вот в листе виден.

Добавляем в общую структуру:
Код
C++ (Qt)
 
//---------Global------------------
QModelIndex currentModelIndex;
CommonElement *currentElement;
//--------------------------------
 
void MainWindow::MainWindow(QWidget *parent) :
   QMainWindow(parent),
   ui(new Ui::MainWindow)
{
  ...
  currentElement = NULL;
 
 
   root = new QObject(this);
   base = new Base(root);
 
   Delegate *mydelegate = new Delegate(this);
 
   treeview = new TreeView(this);
   treemodel = new TreeModelBrowser(root);
   treeview->setModel(treemodel);
   treeview->setEditTriggers(QAbstractItemView::DoubleClicked);
   treeview->setItemDelegate(mydelegate);
 
   listview = new ListView(this);
   listmodel = new ListModelBrowser();
   listmodel->initRoot(base);
   listview->setModel(listmodel);
 
   connect(treeview,SIGNAL(appendChildTree(QModelIndex)),treemodel,SLOT(updateModelInsertRow(QModelIndex)));
   connect(treeview,SIGNAL(appendChildList(QModelIndex)),listmodel,SLOT(setRoot(QModelIndex)));
   ...
}
 
void MainWindow::appendElement()
{
   qDebug()<<"appendElement";
   if(currentElement != NULL)
   {
       Q_EMIT appendChild(currentModelIndex);        
       listmodel->setRoot(currentModelIndex);
   }
}
 
void TreeModelBrowser::updateModelInsertRow(QModelIndex index)
{
   if(index.isValid())
   {
       int row = index.row();
       row++;
       beginInsertRows(index,row,row);
       CommonElement *ce = reinterpret_cast<CommonElement*>(index.internalPointer());
       ce->appendChild();    
       endInsertRows();
   }
}
 
void ListModelBrowser::setRoot(QModelIndex index)
{
   if(index.isValid())
   {
       QObject *obj = reinterpret_cast<QObject*>(index.internalPointer());
       beginResetModel();
       root = obj;
       endResetModel();
   }
}
 


Название: Re: Ошибка(код ошибки 255)
Отправлено: demaker от Декабрь 25, 2013, 10:59
Варианты.
1) Многопоточность. Что-то при работе под отладчиком успевает инициализироваться, а без отладчика - нет.
2) При работе с устройством под отладчиком работа медленнее и устройство успевает ответить на запрос программы.
3) Отладчик ухитряется чистить какие-то регионы памяти, а при работе без отладчика в них мусор.

Спасибо, интересно


Название: Re: Ошибка(код ошибки 255)
Отправлено: Swa от Декабрь 25, 2013, 15:20
Насколько я знаю:
При сборке в дебаг режиме неинициализированные переменные инициализируются нулем;
Безопасная работа с массивами и участками выделенной памяти (контроль выхода за границы)

Так что ищите неинициализированные переменные и запись данных в ячейки за пределами аллоцированого участка памяти.


Название: Re: Ошибка(код ошибки 255)
Отправлено: Serr500 от Декабрь 25, 2013, 16:11
Здесь, насколько я понял, речь не о сборке (debug/release), а о запуске одной и той же сборки под управлением отладчика и без него.

При сборке в дебаг режиме неинициализированные переменные инициализируются нулем
Да ну? Создайте локальную неинициализированную переменную простого типа (указатель, например) внутри функции, поставьте на начало функции брейкпойнт, запустите под отладчиком и посмотрите на значение переменной.


Название: Re: Ошибка(код ошибки 255)
Отправлено: Bepec от Декабрь 25, 2013, 17:54
Swa прав в отдельных случаях. В VS есть надстройка, позволяющая это в дебаге.