Формат MAP-файла, генерируемый компилятором или линкеро

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Re: Формат MAP-файла, генерируемый компилятором или линке

Сообщение Cheb » 06.05.2008 10:51:39

Иногда в этой dll'ке возникают исключения.

Увы, тут кроется величайший облом. Исключения в dll не ловятся!
В смысле, созданные тобой лично - ловятся, но первый же Access Violation пробьёт все блоки try...except как гнилую фанеру, вылетит в основную программу и уронит её.

Это баг RTL ФриПаскаля, в версии 2.2.0 ещё не удавленный.

Для отладки длл надо создавать программу-"обёртку" внутрь которой она будет компилироваться как обычный модуль, и тестить оттуда.

но вот как вывести информацию по перехваченному исключению с помощью un_lineinfo я понять не могу

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

Но можно и так:
Код: Выделить всё
try
  <БАБАХ!>
except
  ExplainException();   
end;

  procedure ExplainException();
  var
    exe, src: ansistring;
    line, column: integer;
  begin
    GetLineInfo(ExceptAddr, exe, src, line, column);
    WriteLn(ExceptObject.ClassName, ' at ', IntToHex(dword(ExceptAddr), 8), ':  '
                  , (ExceptObject as Exception).Message);
    if line < 0 then WriteLn('(no debug info: ' + LineInfoError)
    else begin
      Write('(line ',line);
      if column >=0 then Write(', column ', column);
      WriteLn(' of ', src);
    end;
    WriteLn(' in ', exe, ')');
  end;


Я, лично, использую куда более навороченные надстройки которые о каждом исключении целую поэму сочиняют.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Формат MAP-файла, генерируемый компилятором или линке

Сообщение alexs » 06.05.2008 11:59:13

поиск текста в файле много времени занимает :o ? странно...
просто более полно пиши отладочнцю информацию (имя процедуры на входе, значения параметров, прмежуточные данные, перехватывай екцепшены try-except-ом). Как раз твою ситуацию дебужить не удобно. Сначала логом отлови параметры, с которыми вылетает экцепшен - а потом уже можно и дебагером.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Пред.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru