Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
1 / 1 / 1
Регистрация: 06.03.2015
Сообщений: 80
1

Вылетает qt прога

13.08.2018, 20:34. Просмотров 1560. Ответов 20
Метки нет (Все метки)

У меня qt программа вылетает периодически по одному и тому же смещению.
Имя события проблемы: APPCRASH
Имя приложения: myApp.exe
Имя модуля с ошибкой: Mylibrary.dll
Код исключения: c0000005
Смещение исключения: 2181a53f

Базовый адрес исключения все время разный, а последние 4 цифры a53f всегда одинаковы.
Подскажите как мне найти это место в коде проги, дело в том, что этот баг под отладчиком не случается.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.08.2018, 20:34
Ответы с готовыми решениями:

вылетает прога QTreeView->setRootIndex
Доброго времени суток. Задал вопрос в разделе для начинающих, но пока без ответа. Так что не...

Вылетает прога
Час понять не могу в чем ошибка #include <stdio.h> #include <stdlib.h> int main() { int...

Прога вылетает с ошибкой
Здрасте! На диске есть файл AutoDVD.exe (последняя фотка) Его запускаешь и он должен установить...

Прога вылетает на принтфе
ошибочка, нa getchar() вылет #include <stdio.h> #include <conio.h> #include <windows.h>...

20
Эксперт С++
8341 / 6090 / 607
Регистрация: 10.12.2010
Сообщений: 28,325
Записей в блоге: 29
13.08.2018, 21:05 2
Что не понятного - в коде библиотеки накосячил, вот и вылетает.
0
1 / 1 / 1
Регистрация: 06.03.2015
Сообщений: 80
13.08.2018, 21:43  [ТС] 3
Avazart, это понятно, как по смещению найти в какой из функций накосячил, просто там большая библиотека. Или предлагаете всюду qdebug натыкать ? Или хотя бы как получить стек трейс в момент вылета.
0
Эксперт С++
8341 / 6090 / 607
Регистрация: 10.12.2010
Сообщений: 28,325
Записей в блоге: 29
13.08.2018, 22:27 4
Использовать отладчик.
0
1 / 1 / 1
Регистрация: 06.03.2015
Сообщений: 80
13.08.2018, 23:16  [ТС] 5
Avazart, баг проявляется вне отладки. Мне нужно прицепиться к проге в момент вылета, как бы это сделать, запустить ее надо без отладки изначально.
0
Эксперт С++
8341 / 6090 / 607
Регистрация: 10.12.2010
Сообщений: 28,325
Записей в блоге: 29
13.08.2018, 23:17 6
Запустить под отладкой с отладчиком.
0
1 / 1 / 1
Регистрация: 06.03.2015
Сообщений: 80
13.08.2018, 23:22  [ТС] 7
Avazart, если я запускаю по F5, я так понял вы именно это предлагаете, то есть запуск с отладкой, то баг не проявляется. А когда запускаю через Ctrl+R, то случается вылет, вот как тут поймать.
0
Эксперт С++
8341 / 6090 / 607
Регистрация: 10.12.2010
Сообщений: 28,325
Записей в блоге: 29
13.08.2018, 23:29 8
А пальцами ноги пробовали жать?

Ибо очевидно что если проявляется в релизе, в дебаге при отладке тем более должно появляться.
0
1 / 1 / 1
Регистрация: 06.03.2015
Сообщений: 80
13.08.2018, 23:37  [ТС] 9
Avazart, в дебаге как раз не проявляется почему-то. Пока только придумал прицепиться сторонним отладчиком ollydbg в момент вылета и получить так стек и дизассемблерный вид этой функции и потом в qt поискать где это в коде.
0
Эксперт С++
8341 / 6090 / 607
Регистрация: 10.12.2010
Сообщений: 28,325
Записей в блоге: 29
13.08.2018, 23:44 10
Цитата Сообщение от roman912 Посмотреть сообщение
в дебаге как раз не проявляется почему-то.
Так не бывает.

Я бы создал место библиотеки отладочный проект с исполняемым файлом (вместо dll) и отлаживал его для начала.
0
401 / 364 / 62
Регистрация: 29.05.2015
Сообщений: 2,228
14.08.2018, 07:17 11
Отладка без отладчика. Вставляй в код:

C++ (Qt)
1
2
3
4
5
    #include <QMessageBox>
    QMessageBox msgBox;
 
    msgBox.setText("Hello World");
    msgBox.exec();
и в этом месте программа остановится, и будет стоять, пока кнопку на всплывающем окне не нажмёшь. Меняя положение можно посмотреть, докуда программа доходит и где крашится. Ну и переменные нужные в окошко засунуть вместо Хелловорд.
0
шКодер самоучка
2119 / 1840 / 896
Регистрация: 09.10.2013
Сообщений: 4,017
Записей в блоге: 7
14.08.2018, 08:33 12
Цитата Сообщение от roman912 Посмотреть сообщение
то есть запуск с отладкой, то баг не проявляется
Ищите неинициализирванные переменные: указатели, индексы.
В дебаге они обнуляются компилятором, в релизе же там находится мусор.
0
1440 / 1321 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
15.08.2018, 14:38 13
По идее, если поставить студию, то Windows предложит запустить отладчик, когда падает программа.
0
1663 / 1132 / 80
Регистрация: 21.08.2008
Сообщений: 4,725
Записей в блоге: 1
15.08.2018, 20:04 14
Собрать проект в релизе с дебажными символами, доавить в него хендлер крашей, который снимет предварительно дамп.
Открыть дамп в отладчике, посмотреть где упало.
https://stackoverflow.com/ques... crash-dump
0
Эксперт С++
8341 / 6090 / 607
Регистрация: 10.12.2010
Сообщений: 28,325
Записей в блоге: 29
15.08.2018, 21:01 15
У него скорее всего ошибка в ддл, она скорее не дебажется в проекте. Ему нужно слить все в один проект.
0
1 / 1 / 1
Регистрация: 06.03.2015
Сообщений: 80
15.08.2018, 21:03  [ТС] 16
oxotnik, а можешь рассказать как сделать свой обработчик исключений с созданием дампа с call stack.
0
1663 / 1132 / 80
Регистрация: 21.08.2008
Сообщений: 4,725
Записей в блоге: 1
16.08.2018, 07:32 17
Цитата Сообщение от Avazart Посмотреть сообщение
скорее всего ошибка в ддл, она скорее не дебажется в проекте. Ему нужно слить все в один проект
Какая разница где и кто будет формировать краш-дамп? Отладочные символы в нем будут, останется только загрузить их в дебагер и посмотреть место вылета.

Добавлено через 2 минуты
Цитата Сообщение от roman912 Посмотреть сообщение
можешь рассказать как сделать свой обработчик исключений с созданием дампа
По ссылке не понятно как делать?
У меня есть такое в рабочем проекте, но с него копипаст некоторыми договоренностями запрещен.
0
1 / 1 / 1
Регистрация: 06.03.2015
Сообщений: 80
16.08.2018, 08:09  [ТС] 18
oxotnik, в общем то понятно, просто если пример есть, то было бы лучше.
0
Эксперт С++
8341 / 6090 / 607
Регистрация: 10.12.2010
Сообщений: 28,325
Записей в блоге: 29
16.08.2018, 13:29 19
Цитата Сообщение от oxotnik Посмотреть сообщение
Какая разница где и кто будет формировать краш-дамп? Отладочные символы в нем будут, останется только загрузить их в дебагер и посмотреть место вылета.
Нафига Вам символы, дамп ипр. нафига эта возня? Нужна строчка кода где ошибка, значение переменных и прочие.
Для этого проще написать тестовое приложение чем каждый раз с этим возится.
0
13689 / 7317 / 1746
Регистрация: 30.01.2014
Сообщений: 12,259
16.08.2018, 13:50 20
Цитата Сообщение от Avazart Посмотреть сообщение
Так не бывает
Бывает.
Например потому, что в режиме отладки компилятор может заполнять память служебными символами, в том числе нулями.
Иногда это дает обратный эффект, в отладке есть ошибка - в релизе нет. А иногда это играет злую шутку и эти данные интерпретрируются как валидные - в релизе, например при выходе за пределы массива, мы попали бы на случайный мусор, а в отладке получаем стабильные значения, которые возможно даже не нарушат логику работы.
А еще вполне вероятна ситуация, когда при наличии в коде UB, выстреливать оно начинает только после применения оптимизаций (особенно характерно так стреляют UB от нарушния ODR).

______
Если бы использвался GCC, я бы предложил включить оптимизации, но не отключать отладочные символы (в том числе проверить, что dll тоже собиралась с отладкой), а дальше как обычно, запустить под отладчиком. Если это одна из описанных выше сиуаций, то скорее всего хотя бы приблизительное место удалось бы найти. Думаю, что с VS это тоже возможно.

А еще отладчик можно подцепить к уже работающему приложению, через attach to process.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.08.2018, 13:50

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Списки. Вылетает прога!
program Project1; {$APPTYPE CONSOLE} uses SysUtils, Windows; type TElem=integer; ...

Вылетает прога, надо проверить
case WM_COMMAND: { switch(LOWORD(wParam)){ case 0: {...

Прога вылетает в вижуал студии , как исправить?
#include &lt;stdio.h&gt; #include &lt;locale.h&gt; int main() { setlocale(LC_ALL, &quot;rus&quot;); float x1, x2,...

C++ почему прога вылетает, не успеваю посмотреть действие
дан массив строк, если какая либо строка заканчивается буквой k, то удалить эту строку, вод что я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.