Что может вызвать аварийное завершение программы? - PullRequest
1 голос
/ 18 декабря 2009

Приложение MFC (использует SQLite3.dll для доступа к БД, а также другие библиотеки DLL для доступа к оборудованию) аварийно завершает работу. Там нет определенной последовательности завершения :( Моя заявка

  1. Применение с одной резьбой
  2. Использует обработку исключений
  3. Использует более 6 библиотек DLL для доступа к разным аппаратным средствам
  4. Работает на WinXP SP2

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

Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 18 декабря 2009

Вообще говоря, основными причинами аварий являются следующие:

  • читать память, которая не твоя
  • напиши память не твою
  • делить на ноль
  • сделать что-то внутри прерывания, которое вы не должны
  • free() указатель более одного раза

Возможно также:

  • есть случайное исключение
  • обнаружил ошибку в вашем MFC
  • одна из ваших > 6 DLL-библиотек аппаратного доступа выполняет любое из перечисленных выше действий
  • Вы столкнулись с какой-то аппаратной ошибкой

Возможно, вы передаете неверный буфер в одну из ваших аппаратных библиотек DLL, или забыли заблокировать некоторую память, или у вас может даже быть несовпадение версий между библиотеками DLL и их заголовками.

Есть так много вариантов: P

0 голосов
/ 18 декабря 2009

Поскольку это проблема времени выполнения, я предлагаю вам отправить отладочные операторы в файл журнала. Включите имя функции и, возможно, отметку времени. Всегда очищайте выходной буфер после записи в файл, так как это повышает вероятность того, что последняя строка была записана в файл до возникновения исключения.

...