Russian Qt Forum
Ноябрь 22, 2024, 22:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Программа валится, если не прицепить отладчик  (Прочитано 7346 раз)
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« : Март 31, 2015, 19:40 »

Привет друзья!
Использую win 8 x64, Qt 5.4.1 mingw x64

Сборку произвожу с конфигурацией debug. При сборке по ctrl+r (без отладчика) у меня происходит запуск и сразу же вылет - стандартный диалог винды "Прекращена работа программы...."
Цитировать
Сигнатура проблемы:
  Имя события проблемы:   APPCRASH
  Имя приложения:   Master.exe
  Версия приложения:   0.0.0.0
  Отметка времени приложения:   00000000
  Имя модуля с ошибкой:   nvoglv32.DLL
  Версия модуля с ошибкой:   9.18.13.4752
  Отметка времени модуля с ошибкой:   54d3aed2
  Код исключения:   c0000005
  Смещение исключения:   00922a70
  Версия ОС:   6.3.9600.2.0.0.256.48
  Код языка:   1049
  Дополнительные сведения 1:   5861
  Дополнительные сведения 2:   5861822e1919d7c014bbb064c64908b2
  Дополнительные сведения 3:   a10f
  Дополнительные сведения 4:   a10ff7d2bb2516fdc753f9c34fc3b069

Ознакомьтесь с заявлением о конфиденциальности в Интернете:
  http://go.microsoft.com/fwlink/?linkid=280262

Если заявление о конфиденциальности в Интернете недоступно, ознакомьтесь с его локальным вариантом:
  C:\Windows\system32\ru-RU\erofflps.txt
Запускаясь по F5 (с отладчиком) - всё ок.
Мне бы понять, где я в коде накосячил...
Пока что, глядя на nvoglv32.DLL, понимаю, что где-то в части OpenGL
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Март 31, 2015, 19:47 »

Где то не инициализировали переменные - указатели.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Март 31, 2015, 19:56 »

Можно попробовать скомпилить с отладчиком и с оптимизацией (напр в MSVC такая возможность есть). Иначе или лог или совать в код прямой вызов debug. И то и другое не сладко и не быстро. Лучше всего применить тул (только что отписался в др теме) - но его "надо изыскивать"
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #3 : Март 31, 2015, 20:02 »

Да что-то проблема с этим msvc. Наверное, потому что я решил пытаться работать в community версии. Потом вернусь к нему.
Проблему решил. Для этого пришлось покататься по коммитам, а потом комментируя блоки кода установил, что проблема была в
Код
C++ (Qt)
QOpenGLBuffer::allocate
Я ей передавал указатель на массив данных в памяти и их количество. Количество превышало фактическое.
Не понимаю, почему мне valgrind не ругнулся, да и почему валится... Ну, брал бы себе совершенно левые значения, да и отрисовывал бы (как он это делает с прикреплённым отладчиком)
Записан
Bepec
Гость
« Ответ #4 : Март 31, 2015, 20:19 »

Видимо брал одновременно с тем, чьи данные там лежали. Вот и конфликт интересов Веселый
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #5 : Март 31, 2015, 20:21 »

Видимо брал одновременно с тем, чьи данные там лежали. Вот и конфликт интересов Веселый
Не понимаю. Смотреть запрещено каким-то образом?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Апрель 01, 2015, 08:18 »

..., да и почему валится... Ну, брал бы себе совершенно левые значения, да и отрисовывал бы (как он это делает с прикреплённым отладчиком)
Они могут оказаться за пределами распределенной приложением памяти
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #7 : Апрель 01, 2015, 09:33 »

А как же обнуление при переполнении? Растолкуйте, пожалуйста.
Записан
Bepec
Гость
« Ответ #8 : Апрель 01, 2015, 09:57 »

Если честно в этой области теория у меня хромает на все три ноги, но поправьте меня если я не прав. (заодно подкачаю)

читать одновременно одну и ту же область памяти из разных потоков нельзя?
Почему так решил - печальный опыт работы с потоками - чтение одной переменной двумя разными потоками вызывает неадекватное поведение.

PS а где можно почитать об этом, желательно на русском.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #9 : Апрель 01, 2015, 10:01 »

Можно. Даже писать можно, но результат будет зависит от умений программиста. Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Апрель 01, 2015, 10:42 »

А как же обнуление при переполнении? Растолкуйте, пожалуйста.
Какое обнуление/переполнение? Пример
Код
C++ (Qt)
char * str = new char[1024];
memset(str, 0, 2048);   // ошибка, пишем за пределами блока
 
Это может сразу вылететь, но может и нет. Напр str оказалось в начале страницы выделенной приложению - все норм (тихо гадим).

читать одновременно одну и ту же область памяти из разных потоков нельзя?
Можно, и shared память тоже. 
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #11 : Апрель 01, 2015, 14:48 »

Нет. Игорь, вы дали пример на запись. Моя же функция принимает const char*
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Апрель 01, 2015, 15:02 »

Нет. Игорь, вы дали пример на запись. Моя же функция принимает const char*
В данном случае разницы никакой - при попытке читать адрес не отмапленный в адресное пр-во процесса ОС немедленно выдаст исключение "общая защита"
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #13 : Апрель 10, 2015, 09:22 »

Да, действительно, вы правы.
Я до конца не знал природу сигнала SIGSEGV. Интересно, что без отладчика и на другом пк на линуксе всё работало. Видимо, повезло.
Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.091 секунд. Запросов: 23.