2009-12-17 3 views
1

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

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

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

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

+2

Вы пытались запустить его через отладчик? –

+0

Можете ли вы запустить программу в отладчике и предоставить трассировку стека аварии и/или текста из окна вывода Visual Studio? Также попробуйте создать режим Debug и посмотреть, есть ли у вас какие-либо утверждения. –

+0

... или, по крайней мере, код, который выполняется. –

ответ

3

Вообще говоря, общие причины аварий, когда вы:

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

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

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

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

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

0

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