Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  10:24[Войти] | [Зарегистрироваться]
Ответ на вопрос № 63540

Вопросы с аналогичными сообщениями об ошибках:
  • Runtime error (19)

    03-07-2008 04:34
    Здравствуйте уважаемые!
    Есть рабочий проект (в исходниках), при выходе иногда возникает RunTime Error 204.
    Пока что выяснил лишь то, что эта ошибка возникает при освобождении главной формы приложения.
    Вопрос:
    как можно проследить, при освобождении какого именно компонента происходит эта ошибка.
    Заранее спасибо!

    [+] Добавить в избранные вопросы

    Отслеживать ответы на этот вопрос по RSS

    Ответы:


    Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
    Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

    14-10-2009 15:42 | Вопрос к автору: запрос дополнительной информации
    Как ее устранить?

    03-07-2008 15:14 | Вопрос к автору: запрос дополнительной информации
    Хорошо бы увидеть объявления ф-ий, экспортируемых этой DLL. Есть сильное подозрение, что "ноги растут" оттуда.

    03-07-2008 14:36
    >>>Ну, я ж вам так и сказал. У вас происходит вылет в какой-то секции finalization после финализации модуля SysUtils. "end." - это и есть выполнение всех процедур финализации.
    Наверное я чего-то не понимаю :)
    В проекте не используются блоки finalization. Или Вы имеете ввиду, что ошибка происходит при финализации системных модулей?

    >>>Попробуйте включить Use debug DCU в проекте и сделать build проекту. Потом на "end." нажмите F7, чтобы пойти дальше (попадёте в System._Halt0). Далее следуйте до вызова процедуры FinalizeUnits. Короче, дальше сами разберётесь.
    Про Use debug DCU - не знал, спасибо, попробую.

    >>>Или, если понимаете asm, попробуйте по шагам в окне дизассемблера (View/Debug windows/CPU).
    К сож. нет, это уже хардкор для меня :(

    >>>Загрузка DLL статическая или динамическая? Есть также вероятность, что ошибка происходит при деинициализации DLL (для статической загрузки).
    Динамическая. И она корректно выгружается (по крайней меря я так считаю), это я проверил первым делом, т.к. с ней уже была аналогичная проблема, связанная именно с деинициализацией этой длл.
    Правда, я не очень понял причин ошибки:
    возникала та же RunTime error 204, если библиотека не выгружалась при выходе из программы.
    Как только была сделана процедура освобождения длл, ошибка исчезла.

    03-07-2008 11:52
    Ну, я ж вам так и сказал. У вас происходит вылет в какой-то секции finalization после финализации модуля SysUtils.
    "end." - это и есть выполнение всех процедур финализации.
    Попробуйте включить Use debug DCU в проекте и сделать build проекту. Потом на "end." нажмите F7, чтобы пойти дальше (попадёте в System._Halt0). Далее следуйте до вызова процедуры FinalizeUnits. Короче, дальше сами разберётесь. Или, если понимаете asm, попробуйте по шагам в окне дизассемблера (View/Debug windows/CPU).
    Загрузка DLL статическая или динамическая? Есть также вероятность, что ошибка происходит при деинициализации DLL (для статической загрузки).

    03-07-2008 10:39 | Сообщение от автора вопроса
    Исходники есть, менять их могу.
    Программа состоит из ~60 форм.
    Также, программа юзает самописную Длл-ку, длл-ка в свою очередь содержит форму.
    "Глючная" процедура программы - выгрузка данных в определенном формате. Выгрузку производит процедура, внутри этой процедуры вызывается масса функций, в том числе и функция из Длл-ки.
    Выгрузка происходит успешно, никаких ошибок не наблюдается.
    После выгрузки, при закрытии главной формы программы (не Длл-ки), происходит Runtime error.
    Когда дебажил программу (ну, пытался понять где происходит ошибка), понял лишь то, что ошибка появляется на самом последнем операторе end. которых находится в dpr-файле.

    program NW_Project;
    {$D+}

    uses
      FastMM4,
      sharemem,
      dialogs,
      Forms,
      SysUtils,
      Unit1 in 'Unit1.pas' {Main_Form},
      тут куча юнитов пропущена
      frmAccSepNew in 'frmAccSepNew.pas' {SepSchet_New};

    {$R gorod.res}

    begin
                 App := Application;
                 Application.Initialize;
                 Application.CreateForm(TMain_Form, Main_Form);

            тут куча текста опущено

            Application.CreateForm(TSepSchet_New, SepSchet_New);
            Application.Run;
    end;

    end. <- на этом месте вылетает runtime error


    03-07-2008 10:17
    Я плохо выразился.
    Ошибка возникает после выполнения определенной процедуры, но внутри этой процедуры вызывается масса других функций и процедур. Хуже, тут же идет работа с формой внутри DLL-ки.

    Не понял. Выход из программы - он тут причём или нет? Идёт вызов функций из DLL или, наоборот, мы в DLL и нас вызывают?

    >>> Автор программы не я, мне оч. трудно даже примерно понять что может быть источником ошибки.
    У вас вообще есть доступ к исходникам программы? Менять их можете?
    Попробуйте тупо проставить по тексту программы:

    OutputDebugString('step 1 passed');
    // что-то делаем
    OutputDebugString('step 2 passed');
    // что-то делаем
    OutputDebugString('step 3 passed');

    Эти сообщения удобно ловить DebugView (http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx). Особенно оберните вызовы функций DLL.

    03-07-2008 09:42 | Сообщение от автора вопроса
    PS
    блоки initialization/finalization в программе не используются.

    03-07-2008 09:40 | Сообщение от автора вопроса
    >>>И не видя вашей программы вам никто наперёд не скажет, в чём проблема.
    Прекрасно понимаю =)

    >>>Попробуйте отключать блоки/модули программы по одному и пытаться воспроизвести ошибку. Как только, после очередного отключения, ошибка исчезла - вы нашли виновника. Для этого желательно бы ещё добиться 100% воспроизводимости ошибки.
    Я плохо выразился.
    Ошибка возникает после выполнения определенной процедуры, но внутри этой процедуры вызывается масса других функций и процедур. Хуже, тут же идет работа с формой внутри DLL-ки.
    Автор программы не я, мне оч. трудно даже примерно понять что может быть источником ошибки.
    Вопрос примерно такой: можно ли проследить, при освобождении какого компонента (объекта, формы или еще чего) или при обращении к какому участку памяти происходит эта ошибка (исключение).

    03-07-2008 09:29
    А и не в компоненте скорее всего дело. И не при освобождении формы это происходит, а при выходе из программы. В обычной ситуации, все run-time ошибки преобразовываются модулем SysUtils в обычные исключения Delphi.
    Если в программе возникает Run-Time, то это может быть только в двух случаях:
    1). Во время инициализации программы до того, как обработчики из SysUtils инициализировались.
    2). Во время закрытия программы после того, как обработчики из SysUtils убраны.
    (ну не считая случаев, когда вы как-то умудрились полностью угробить обработку ошибок в программе).

    Run-time ошибка номер 204 означает "Invalid pointer operation" и в обычных условиях (с работающим SysUtils) эквивалентна исключению EInvalidPointer.
    Одна из возможных причин - повторное удаление уже освобождённых ресурсов в секции finalization.

    Но вообще, причин может быть тонна. И не видя вашей программы вам никто наперёд не скажет, в чём проблема.
    Попробуйте отключать блоки/модули программы по одному и пытаться воспроизвести ошибку. Как только, после очередного отключения, ошибка исчезла - вы нашли виновника. Для этого желательно бы ещё добиться 100% воспроизводимости ошибки.

    Добавьте свое cообщение

    Вашe имя:  [Войти]
    Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
    контрольный вопрос:
    Кто съел Красную шапочку?
    в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
    Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
    Тип сообщения:
    Текст:
    Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Вопросы с аналогичными сообщениями об ошибках:
  • Runtime error (19)


    Страница избранных вопросов Круглого стола.
  •   
    Время на сайте: GMT минус 5 часов

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

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования