Прога падает, винда указывает на kernel32

Тема в разделе "WASM.BEGINNERS", создана пользователем Arisu, 11 июн 2010.

  1. Arisu

    Arisu Алиса Селезнёва

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    89
    Есть прога написанная на шестом билдере, немаленькая. Борландовских компонентов применено по минимуму: таймер, кнопки, таблицы, меню, картинки.

    Программа работает с RS-232 через WINAPI и активно выводит информацию в различные таблицы и сохраняет её на диск.

    Суть в том, что проекту 4 года, он постоянно растёт и видоизменяется, но всё это время в нём живёт досадная беда: переодически (не чаще чем раз в день, иногда раз в неделю) прога падает с стандартной ошибкой: "программа выполнила недопустимую операцию бла бла бла".

    Виндовский отчёт говорит следующее: исключение произошло в модуле kernel32, по смещению 0x01EB33.

    Соответственно выяснить что-то средствами билдера или обычными отладчиками - сложно. С ядерными отладчиками я не знаком.

    Идей несколько:
    1) какой-то из компонентов билдера, используемых мной, косячит, но какой?.
    2) проблемы в моём коде (и я их не могу найти уже 4 года).

    Место падения я более-менее локализовал (с точностью до 3 тысяч строк кода, хаха)))) там идёт активная работа с памятью, указателями и выводом в небольшую TStringGrid.

    сначала там была динамическая память, в целях эксперимента поменял всё на статические массивы - результата это не дало =\. Состояние всех указателей проверил - всё железно. Никто ни куда не вываливается.

    Что делать?
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Установить билдеровский отладчик в качестве JIT дебагера, если и это не поможет думать дальше.
     
  3. gorodon

    gorodon New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2009
    Сообщения:
    301
    Для начала надо проанализировать сообщение винды об ошибке (там должен быть код ошибки или краткое описание).
    Затем локализуйте функцию из kernel32, в которой происходит исключение (утилита типа Dependency Walker) - дальше уже попроще будет.
     
  4. lhc645

    lhc645 New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    106
    >> Виндовский отчёт говорит следующее: исключение произошло в модуле kernel32, по смещению 0x01EB33

    Взять отладчик, поддерживающий символы, загрузить последние с сайта ms, приаттачиться к процессу, посмотреть в стек.
     
  5. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Завернуть подозрительные процедуры в try/except и для каждой из них выводить уникальное сообщение. Ну и поставить OllyDebug в качестве тотального отладчика и посмотреть, что валяется на стеке. Какой-то из адресов вида 4хххххх скорее всего являются адресом возврата в твою программу. Предварительно нужно попросить Билдер сделать тебе map-файл, по этому map-файлу можно раскопать, в какую функцию этот адрес возврата ведёт.
     
  6. Arisu

    Arisu Алиса Селезнёва

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    89
    на сколько я понял - билдеровский трай/эксепт распространяется только на код основного модуля. на системные библиотеки ему фиалетово =\

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

    Arisu Алиса Селезнёва

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    89
    код ошибки вроде 1000
    показывает, что адрес 1EB33 в kernet32 - это где-то в середине CreatPipe (который я явно не вызываю. только если сам билдер)
     
  8. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    tru в винде использует seh, а системные функции часто поверх него ставят свой seh, который и роняет прог не передавая твоему управления, хотя по хорошему должны бы. Для решения этой проблемы как раз и придуман veh, попробуй сам обернуть им не надеясь на компилятор.
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Arisu
    коденг не ваше занятие.)
     
  10. Arisu

    Arisu Алиса Селезнёва

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    89
    может чем-то более существенным поможешь?
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Arisu
    Чем помочь ?
    Показать где у вас на клаве кнопка F2 ?
     
  12. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    Arisu
    тебе уже сказали ответ выше, дамп сгенерировать, и колстек получить, проанализировать, исправить
     
  13. Arisu

    Arisu Алиса Селезнёва

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    89
    ну вот. сижу жду, когда опять упадёт. В понедельник наверное будет.