суббота, 28 мая 2011 г.

Qt: SIGSEGV Segmentation fault при запуске программы в режиме отладки. Возможная причина и решение.

     После N-ного количества времени, потребовалось мне запустить одно приложение в Qt Creator'е (в ОС Windows XP) в режиме отладки. Как же я был неприятно удивлен, когда IDE поругалась на "Segmentation fault" и наотрез отказалось "дебажить" программу. Поначалу, казалось,что это результат несовместимости кода, набранного в более старой среде, и последней версии Qt SDK. Но программа прекрасно компилировалась и запускалась и в debug и release вариантах. Так "несовместимость версий" отпала, а вот таинственная "guard32.dll", что загадочным образом подключалась к запускаемому приложению, просветила суть вещей :-).
       Путь к истине был долог и тернист, но не сломил он духа праведного :-) и, в итоге, привел к Comodo Firewall. А точнее к той его части, что отвечает за контроль запускаемых приложений. Т.о. отключив Проактивную защиту Comodo Firewall, можно добиться желанного - отладка в Qt Creator запускается без каких-либо предупреждений или ошибок. Но это явно "не наш метод", поскольку даже после отключения нужно еще и перезагрузить ПК - дабы выгрузились соответствующие процессы. К тому же, согласитесь, не для того ставили программу защиты, что бы ей потом не пользоваться ;-). Что же делать, спросите вы? Обратиться к настройкам Проактивной защиты фаервола и указать директории игнорирования проверки внедрения shell-кода. Для этого необходимо:

1. Открыть главное окно Comodo Firewall и перейти на вкладку "Защита".
2. На вкладке "Защита" выбрать пункт меню "Настройки Проактивной защиты".
3. В открывшемся окне перейти на вкладку "Настройки контроля исполнения приложений".
4. На вкладке "Настройки контроля исполнения приложений" нажать кнопку "Исключения".
5. В открывшемся окне "Исключения" выбрать пункт меню "Добавить"=>"Обзор" (реализовано в виде кнопки).
6. В открывшемся окне выбрать директорию в которой у вас находиться разрабатываемый проект (кстати, директории могут добавляться по маске, поэтому можно сразу добавить корневую директорию содержащую все ваши проекты Qt, например, "C:\myQt_projects"). Обратите внимание, что для добавления директории ее нужно "перетащить" в секцию справа!
7. Сохранить изменения. 

     Собственно, на этом манипуляции заканчиваются и можно возвращаться к работе в Qt Creator :-). Для тех же, у кого не стоит Comodo Firewall, но возникает аналогичная ситуация, рекомендую поэкспериментировать с установленными программами защиты (фаерволы, антивирусы, антитрояны и прочее) - в последнее время, очень часто, именно они становятся причинами "непонятных" ситуаций :-).

2 комментария:

  1. У меня нет Comodo FireWall а ошибка та же в отладке

    ОтветитьУдалить
    Ответы
    1. Ошибка не является "спецификой" Comodo Firewall. Причиной Qt: SIGSEGV Segmentation fault может стать и обращение к несуществующему или к защищенному участку памяти. Если программа у Вас компилируется и работает в release моде, попробуйте посмотреть в сторону установленных средств защиты - антивирусов, фаерволов, антишпионов и прочего софта, который "любит" запускать подозрительные программы в "песочнице".

      Удалить