Название: Программа вылетает без отладчика. Отправлено: apv1989 от Августа 11, 2010, 20:04 Господа, здравствуйте.
Кто-нибудь сталкивался с подобной проблемой: под отладчиком программа нормально работает, а когда запускаю просто так скомпилированный экзешник, то прога вылетает с эксепшеном и закрывается. Как ловит такие ошибка, подскажите. А второй глюк похож, но немного по-другому себя проявляет: в дебажной версии все нормально роботает, а собираю релиз версию, все сыпется (( Какие у кого есть идеи по причинам такого факта и по борьбе с ним? Название: Re: Программа вылетает без отладчика. Отправлено: Drafter от Августа 11, 2010, 20:23 Под какой операционкой компилируете?
Название: Re: Программа вылетает без отладчика. Отправлено: iRQSX от Августа 11, 2010, 20:37 Возможно прога не может найти библиотек QT, положите все используемые библиотеки в папку с прогой или пропишите в PATH. Было такое под виндой.
Название: Re: Программа вылетает без отладчика. Отправлено: apv1989 от Августа 11, 2010, 20:55 Под линухом и под виндой одно и тоже, а dll находит.
Под линухом еще смешнее бывают косяки, Ubuntu 9.04 и qt 4.6.3/ Хочу через стандартный openfiledialog открыть файл, вызваю диалог, а окно пустое.... ну вообще ничего в нем нету. Название: Re: Программа вылетает без отладчика. Отправлено: Авварон от Августа 11, 2010, 21:03 проверьте инициализацию переменных... как-то было что в дебаг сборке компилер занулял указатели и проверки на 0 срабатывали, а при переносе в релиз зануления не стало
Название: Re: Программа вылетает без отладчика. Отправлено: DS_tm от Августа 11, 2010, 21:32 Данная ситуевина возникает если указатель на объект имеет неверный размер. Чаще всего это результат приблизительно таких действий:
Код
Тоесть клиент расчитывает что используеться указатель на класс B, хотя на самом деле используеться указатель на класс А. У меня такая ситуация возникла, когда я, в паттерне "Фабричный метод", забыл переопределять виртуальную функцию createObject(), и, соответсвенно получал указатель на родительский класс, вместо дочернего. Название: Re: Программа вылетает без отладчика. Отправлено: Авварон от Августа 11, 2010, 22:16 паттерны выучили, а использовать динамик каст вместо статик каста - нет:)
Название: Re: Программа вылетает без отладчика. Отправлено: DS_tm от Августа 11, 2010, 22:29 паттерны выучили, а использовать динамик каст вместо статик каста - нет:) Ну как говориться, молодец! )))В том то и соль, что должен быть статик каст ибо динамик вернет нам ноль, а не указатель на обрезаный объект. Скажите спасибо что не использовал привидение в стиле Си)) ЗЫ: А вообще не мудренно выучить сначала паттерны, ибо это штука межязыковая, в отличии от кастов. Люди, учите паттерны, экономте собственные нервы и время! =) Название: Re: Программа вылетает без отладчика. Отправлено: Alex Custov от Августа 11, 2010, 23:10 Люди, учите паттерны, экономте собственные нервы и время! =) Люди, НЕ учите паттерны. Прокачивайте свой опыт, после чего >половины паттернов станет очевидна. Название: Re: Программа вылетает без отладчика. Отправлено: apv1989 от Августа 11, 2010, 23:24 Авварон, спасибо. Что сказал куда копать. действительно из за указателя вылетало. Проверил, теперь честно где удаляю объект, выставляю указатель в NULL. :) Давно не прогал на плюсах, забыл о всяких таких мелочах.
Название: Re: Программа вылетает без отладчика. Отправлено: SASA от Августа 12, 2010, 11:09 Код: в дебажной версии все нормально роботает, а собираю релиз версию, все сыпется Под линухом после падения создаются дампы. По ним можно посмотреть колстек, и примерно локализовать ошибку. Название: Re: Программа вылетает без отладчика. Отправлено: apv1989 от Августа 12, 2010, 12:17 SASA, подскажи тогда что изменить в настройках сборки, чтобы релиз с дебажной информацией собирался, а то я добавляю -g, но дебагер все равно не цепляется. и -DQT_NO_DEBUG пробовал убирать, все равно не цепляется.
Название: Re: Программа вылетает без отладчика. Отправлено: whirlwind от Августа 12, 2010, 17:04 SASA, подскажи тогда что изменить в настройках сборки, чтобы релиз с дебажной информацией собирался, а то я добавляю -g, но дебагер все равно не цепляется. и -DQT_NO_DEBUG пробовал убирать, все равно не цепляется. хм, а зачем?дебаг от релиза как раз наличием дебажной информации и отличается вроде Название: Re: Программа вылетает без отладчика. Отправлено: apv1989 от Августа 13, 2010, 01:48 Как я понимаю используются разные Dll QtCored4 или QtCore4 и остальные Dll тоже с бквой d или без, в зависимости от сборки. Но к примере QtGuid весит 140 мб, а QtGui всего 9... пока я просто из QtGuid вырезаю всю дебажную информацию через strip, хоть получается чуть больше чем просто QtGui, но потом upx и вся программа с dll весит уже 5 м.б. против первоначальных 200~ =)
Название: Re: Программа вылетает без отладчика. Отправлено: xokc от Августа 13, 2010, 08:48 дебаг от релиза как раз наличием дебажной информации и отличается вроде В общем случае дебаг от релиза может отличаться чем угодно - вплоть до разного состава компилируемых файлов. Не говоря уже о разных опциях компилятора и методов оптимизации.Название: Re: Программа вылетает без отладчика. Отправлено: SASA от Августа 13, 2010, 09:54 SASA, подскажи тогда что изменить в настройках сборки, чтобы релиз с дебажной информацией собирался, а то я добавляю -g, но дебагер все равно не цепляется. и -DQT_NO_DEBUG пробовал убирать, все равно не цепляется. Я работую в VS. Там просто ставиш галочку - генери дебужную инфу.Код: дебаг от релиза как раз наличием дебажной информации и отличается вроде Студийный компилятор кладёт инфу в отдельный файл *.pdb. А в основной файл добавляет uid по которому сопосталяет exe и pdb файлы. Грубо говоря, дебужная информация это таблица соответствия инструкции в исполняемом файле и строчке кода. При подении система говорит: инструкция по такому-то адресу сделала не то. Дебагер смотрит в таблицу, и говорит какой строке это соответствует. |