Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не работает отладчик в Qt Creator
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt инструментарий
DarkDiamonD
Здравствуйте!
Не могу настроить отладчик под Qt Creator.
После запуска в режиме отладчика программа сразу же падает, получив segmentation fault. При запуске без отладки все нормально.

Читал, что дело может быть в том что не собраны отладочная версия библиотеки Qt, но так толком и не прошарил, что делать.
У меня установлена qt-sdk-win-opensource-2010.01 (Qt 4.6.1 + Qt Creator 1.3.1) Ставил инсталятором. Перед этим также поставил Debugging Tools for Windows последней версии, т.к. где-то прочитал что SDK с ним работает. Честно говоря, я совсем запутался как это все друг другом и все вместе используется. Сборка проде проходит нормально. Проблемы возникают только при выполнении в режиме отладчика.

Подскажите, пожалуйста, в каком направлении искать решение.

sharpey
Если не ошибаюсь, Вы программируете под Windows. Тогда ответьте на такой вопрос: установлен ли на проблемном ПК Daemon Tools 4-й версии?
Litkevich Yuriy
Цитата(DarkDiamonD @ 6.2.2010, 10:10) *
Читал, что дело может быть в том что не собраны отладочная версия библиотеки Qt, но так толком и не прошарил, что делать.
У меня установлена qt-sdk-win-opensource-2010.01 (Qt 4.6.1 + Qt Creator 1.3.1) Ставил инсталятором.
начиная с Qt 4.5. инсталятор содержит и отладочные и релизные библиотеки.
DarkDiamonD
Цитата(sharpey @ 6.2.2010, 16:37) *
Если не ошибаюсь, Вы программируете под Windows. Тогда ответьте на такой вопрос: установлен ли на проблемном ПК Daemon Tools 4-й версии?

Да, под Windows. Под Linux все работает как надо без дополнительных плясок.
Daemon Tools не стоит никакая. Пользуюсь Алкоголем 120%, но и он постоянно в памяти не висит, ибо крайне редко нужен.
Я пользуюсь еще COMODO Internet Security с проактивной защитой Думал что влияет, так отрубил полностью и попытался запустить отладку - результат тот же. :(

Цитата(Litkevich Yuriy @ 6.2.2010, 17:48) *
начиная с Qt 4.5. инсталятор содержит и отладочные и релизные библиотеки.

Насколько я понял, да. В C:\Qt\2010.01\qt\lib\ на каждую либу по два файла: libQtLibname4.a и libQtLibnamed4.a, а в C:\Qt\2010.01\qt\bin\ соответствующие dll'ки. Да и в принципе, как я понимаю, если бы не было отладочных версий библиотек, то не сработал бы линкер для Debug версии программы.
CrackedMind
Debugging Tools for Windows нужен если вы собираете проект MSVC++.

Может распишите по шагам что делаете и что происходит потом.
DarkDiamonD
Цитата(CrackedMind @ 7.2.2010, 6:11) *
Может распишите по шагам что делаете и что происходит потом.


Создал примитивный проект:
TEMPLATE = app
SOURCES += main.cpp

main.cpp
#include <QtGui>
int main (int argc, char** argv)
{
    QApplication app(argc, argv);
    QPushButton button("Hello World!!!");
    button.show();
    return app.exec();
}

Жму "Начать отладку". Вот что пишет сборщик:
Раскрывающийся текст

Выполняется сборка проекта SimpleProj...

Запускается: c:/qt/2010.01/qt/bin/qmake.exe E:/Dima/Geophysics/My programs/SimpleProj/SimpleProj.pro -spec win32-g++ -r
Завершено с кодом 0.
Запускается: C:/Qt/2010.01/mingw/bin/mingw32-make.exe -w

mingw32-make: Entering directory `E:/Dima/Geophysics/My programs/SimpleProj'
C:/Qt/2010.01/mingw/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `E:/Dima/Geophysics/My programs/SimpleProj'
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\2010.01\qt\include\QtCore" -I"c:\Qt\2010.01\qt\include\QtGui" -I"c:\Qt\2010.01\qt\include" -I"c:\Qt\2010.01\qt\include\ActiveQt" -I"debug" -I"c:\Qt\2010.01\qt\mkspecs\win32-g++" -o debug\main.o main.cpp
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug\SimpleProj.exe debug/main.o -L"c:\Qt\2010.01\qt\lib" -lmingw32 -lqtmaind -lQtGuid4 -lQtCored4
mingw32-make[1]: Leaving directory `E:/Dima/Geophysics/My programs/SimpleProj'
mingw32-make: Leaving directory `E:/Dima/Geophysics/My programs/SimpleProj'
Завершено с кодом 0.

После чего открывается окно Дизасемблера
Раскрывающийся текст
 0x10017cd1     jge    0x10017caf <guard32!?Exported@@YAXXZ+87183>
0x10017cd3     add    %dl,(%eax)
0x10017cd5     add    %al,(%eax)
0x10017cd7     jne    0x10017cef <guard32!?Exported@@YAXXZ+87247>
0x10017cd9     testw  $0x100,-0x20(%ebp)
0x10017cdf     jne    0x10017cef <guard32!?Exported@@YAXXZ+87247>
0x10017ce1     andl   $0x0,-0x4(%ebp)
    0x10017ce5     cmpw   $0x5a4d,(%esi)
0x10017cea     je     0x10017cfa <guard32!?Exported@@YAXXZ+87258>
0x10017cec     mov    %edi,-0x4(%ebp)
0x10017cef     mov    -0x28(%ebp),%eax
0x10017cf2     mov    -0x34(%ebp),%ecx
0x10017cf5     lea    (%eax,%ecx,1),%esi
0x10017cf8     jmp    0x10017cbf <guard32!?Exported@@YAXXZ+87199>
0x10017cfa     mov    0x3c(%esi),%eax
0x10017cfd     add    %esi,%eax
0x10017cff     cmpl   $0x4550,(%eax)
0x10017d05     jne    0x10017cec <guard32!?Exported@@YAXXZ+87244>
0x10017d07     mov    %edi,-0x4(%ebp)
0x10017d0a     mov    %esi,%eax
0x10017d0c     call   0x1000ff65 <guard32!?Exported@@YAXXZ+55109>
0x10017d11     ret    $0x4
0x10017d14     xor    %eax,%eax
0x10017d16     inc    %eax
0x10017d17     ret    
0x10017d18     mov    -0x18(%ebp),%esp
0x10017d1b     movl   $0xfffffffe,-0x4(%ebp)
0x10017d22     xor    %eax,%eax
0x10017d24     jmp    0x10017d0c <guard32!?Exported@@YAXXZ+87276>
0x10017d26     push   $0xc
0x10017d28     push   $0x10020348
0x10017d2d     call   0x1000ff20 <guard32!?Exported@@YAXXZ+55040>
0x10017d32     mov    0x8(%ebp),%eax
0x10017d35     mov    %eax,0x8(%ebp)
0x10017d38     xor    %edi,%edi
0x10017d3a     cmp    %edi,%eax
0x10017d3c     jne    0x10017d48 <guard32!?Exported@@YAXXZ+87336>
0x10017d3e     push   %edi
0x10017d3f     call   *0x1001b040
0x10017d45     mov    %eax,0x8(%ebp)
0x10017d48     mov    %edi,-0x4(%ebp)

Стрелка останавливается на 8 строке "0x10017ce5 cmpw $0x5a4d,(%esi)"
И вылетает мессаджбокс
"Приложение остановлено, т.к. получило сигнал от операционной системы.
Сигнал: SIGSEGV
Назначение: Segmentation fault"
DEADHUNT
значит адрес на который указывает esi не доступен.
MoPDoBoPoT
Цитата(DarkDiamonD @ 7.2.2010, 2:52) *
Я пользуюсь еще COMODO Internet Security

У моего одногруппника проблема при дебаге была из-за этого фаервола, причем отключение COMODO не помогало. В итоге он как-то настроил, но как - хз.
Rocky
Интересно причем тут фаервол и отладчик( Он что стучится в инет и сообщает разработчикам Qt кто что пишет? :crazy:
Kagami
У фаервола комодо есть проактивная защита, которая следит за выполняемыми приложением действиями.
Litkevich Yuriy
Да уж, чтобы из-за брандмауэра не работал отладчик, яб точно не додумался.
DarkDiamonD
Цитата(MoPDoBoPoT @ 7.2.2010, 19:57) *
У моего одногруппника проблема при дебаге была из-за этого фаервола, причем отключение COMODO не помогало. В итоге он как-то настроил, но как - хз.

Да, действительно, дело в этом КОМОДе. Снес его полностью - все заработало. Сейчас установил последнюю версию и играюсь с настройками. Пока безрезультатно, хотя уже разрешил Creator'у все, что можно и нельзя. Если смогу точно определить, где не пускает, отпишусь. Если нет, тогда буду думать над заменой КОМОДа.
Всем спасибо за помощь!
DarkDiamonD
В общем проблема в том, что COMODO (а именно guard32.dll) конфликтует с gdb:
Соответсвующий топик на форуме комода
Насколько я понял, единственный способ это пофиксить заключается в исключеннии этой длл из списка автозагрузки. Это можно сделать с помощью программы autoruns, либо просто переименовать C:\WINDOWS\system32\guard32.dll.
Из обсуждения на форуме COMODO так и не понятно, как это повлияет безопасность системы - никто толком не знает.
Лично у меня комод никаких гневных ругательств не выдал и работает, вроде, как и прежде.
Так что вот...
Litkevich Yuriy
Цитата(DarkDiamonD @ 8.2.2010, 21:49) *
никто толком не знает
Смешно. Может тогда и вовсе комод в утиль сдать (в смысле не пользоваться им)
Kagami
У меня он стоит. Проактивная защита отключена. Использую его только как фаервол. Отладчик работает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.