Название: Q_ASSERT молча вываливаеться Отправлено: DmP от Январь 24, 2006, 15:58 Qt 4.1 + Mingwin + Code::Blocks
Q_ASSERT - молча завершает программу с сообщением: "exited 3 Debugger finished with status 0" Можно ли как нибудь сделать, что бы отладчик как-то перехватывал это дело, что бы посмотреть стек вызовов? Помню, в wxWidgets даже выскакивает сообщение, хочу ли ли я завершить приложение а в Qt как то тихо. Что можно сделать? А то как-то не понятно зачем здесь вообще этот Q_ASSERT. =) Название: Q_ASSERT молча вываливаеться Отправлено: nEoN от Январь 24, 2006, 17:06 Можно перепределить обработчик таких вещей.
QtMsgHandler qInstallMsgHandler ( QtMsgHandler handler ); Описание и пример в ассистенте. Название: Q_ASSERT молча вываливаеться Отправлено: Dendy от Январь 24, 2006, 17:08 Перехватить оконечно можно:
Код: void myMessageHandler( QtMsgType type, const char * msg ) Ставишь там брикпоинтьІ чтоб каллстек получить аль свои сообщения с вьІводом куда взбредёт. А вот НЕ завершить программу - уж извольте. ФатальньІе ошибки - ошибки программирования (всякие вьІходьІ за предельІ массива и прочее) не гарантируют нормальное продолжение работьІ программьІ. Следовательно все глюки, которьІе полученьІ будут после первой ошибки - симптомьІ, не отображающие наличие реального бага в коде, а лишь следствие предьІдущей ошибки. Так что тут всё в порядке - максимум ошибок, которьІх можно получить - 1 (одна) штука на 1 (одну) отладку. Устраняем, ищем следующие. :D Название: Q_ASSERT молча вываливаеться Отправлено: DmP от Январь 25, 2006, 09:48 Цитата: "nEoN" Можно перепределить обработчик таких вещей. QtMsgHandler qInstallMsgHandler ( QtMsgHandler handler ); Описание и пример в ассистенте. Это я сделал в первую очередь, когда не смог получить отладочных сообщений ни от IDE ни от утилиты sysinternal - DebugViewNt. А при чем здесь Q_ASSERT? Сорри. =) Ни кто не видел как работает wxASSERT под VC6? Вот мне хотелось, что бы было также. =) добавлено спустя 18 минут: Ага ... понял: =) Код:
Спасибо за помощь. =) добавлено спустя 3 минуты: Тогда у меня еще несколько вопросов, можно ли в место abort() вставит, что-то типа int 3, или как там его? =) И как можно под виндой отправить отладочное сообщение IDE? Или в тот же ViewDebug? Название: Q_ASSERT молча вываливаеться Отправлено: Dendy от Январь 25, 2006, 10:22 OpenSource рулит (-; Смотреть сюда:
qglobal.cpp Код: void qt_message_output(QtMsgType msgType, const char *buf) Название: Q_ASSERT молча вываливаеться Отправлено: DmP от Январь 25, 2006, 12:12 Цитата: "Dendy" OpenSource рулит (-; Смотреть сюда: qglobal.cpp Код: void qt_message_output(QtMsgType msgType, const char *buf) Спасибо, посмотрю. =) Опенсорц конечно рулит, но правда не всегда. :D То, о чем я спрашивал, реализуеться так: Код:
добавлено спустя 7 минут: Конечно, еще хочеться выводить сообщение в окошечко "Debugger" Code::Blocks, но это наверное уже на гране фантастики. =) добавлено спустя 1 час 33 минуты: Не, ну это какое-то издевательство, в режиме отладки сообщения не попадают в DebugView, хотя и пишуться в файл. Тогда как если просто запустить программу, то сообщения высвечиваються. :( Люди, помогите, как вы отлаживаете проги на GCC под виндой? Название: Q_ASSERT молча вываливаеться Отправлено: Вудруф от Январь 26, 2006, 07:29 По-разному, где QMessageBox::information, где ofstream, где cerr...
-- Пишу под FAR'ом ;) Название: Q_ASSERT молча вываливаеться Отправлено: DmP от Январь 26, 2006, 09:38 Цитата: "Вудруф" По-разному, где QMessageBox::information, где ofstream, где cerr... -- Пишу под FAR'ом ;) Да только когда, в проекте окло 130 файлов хочеться удобства в работе =) А FAR-ом я смотрю файл с сообщениями, он его сам прокручивает. Вот только если бы ему можно было сделать "Всегда наверху", и уменьшить размер... =) Кстати, фокус с int 3, мне понравился, у меня автоматически в отладчике выскакивает окошко стека. =) |