Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Исключительные ситуации, ошибки, Как узнать имя процедуры, вызвавшей искл 
:(
    Опции темы
Avers
Дата 10.10.2008, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.6.2008
Где: 26rus

Репутация: нет
Всего: нет



Есть интересная похожая тема
http://forum.vingrad.ru/topic-149106.html

Так вот попрос: как обратиться к Call Stack во время выполнения программы. 
Т.е. хотелось бы написать такую штуковину, которая работает с Call Stack во время выполнения приложения. Модуль бы такой состряпать.
Возможно ли это?
--------------------
Born to be wild
PM MAIL   Вверх
CodeMonkey
Дата 10.10.2008, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Берите готовый - например JclDebug из JCL.

См. также:
Вопрос КС № 57687.
Вопрос КС № 58566.
Вопрос КС № 58456.

Добавлено через 2 минуты и 55 секунд
Блин, в теме что вы указали, уже всё есть:

Цитата(dumb @  2.5.2007,  03:18 Найти цитируемый пост)
либо воспользоваться готовыми компонентами:
Цитата(Peter Below (TeamB))

Debugging helpers 
  madExcept: http://www.madshi.net/ 
  Exceptional Magic: http://dimus.virtualave.net/ 
  Stack tracer published in Delphi Magazine: http://www.thedelphimagazine.com/disks/dmag50.zip 
  JclDebug: http://delphi-jedi.org -> Code Library 
  DJMDebug 0.5: http://www.murdoch-sutherland.com/programs 
  EurekaLog: http://www.eurekalog.com



--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Avers
Дата 13.10.2008, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.6.2008
Где: 26rus

Репутация: нет
Всего: нет



Спс)
Но дело вот в чем
Цитата

хотелось бы написать

Нет необходимости в стольм мощном обработчике событий. Нужен более простой, написанный самостоятельно. 
--------------------
Born to be wild
PM MAIL   Вверх
CodeMonkey
Дата 13.10.2008, 09:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Цитата(Avers @  13.10.2008,  08:27 Найти цитируемый пост)
Нужен более простой, написанный самостоятельно.

Перепишите JclDebug самостоятельно smile 
Если серьёзно, то нет никакого смысла этого делать. Но если вам уж ТАК хочется - просто возьмите нужные функции из модуля.
Кроме того, "простой" не получится написать по-любому. Дело в том, что вся отладочная информация идёт только из одного места: из текстовых .map-файлов, создаваемых линкёром. А это значит, что, чтобы получить текстовое имя по адресу, вам нужно будет как минимум написать парсер map-файлов. Это вам не как два пальца...


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Avers
  Дата 5.11.2008, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.6.2008
Где: 26rus

Репутация: нет
Всего: нет



Но как минимум, имя процедуры в исключительной ситуации узнать все же можно:
Код

procedure TForm1.MyException(Sender: TObject; E: Exception);
var
  i: integer;
  s: string;
begin
  if copy(e.Message,1,6)='Access' then
    begin
      i := strtoint('0x'+copy(e.Message,Pos('address',e.Message)+8,8));
      s := '';
      repeat
        s := Self.MethodName(Pointer(i));
        dec(i,2);
      until (s<>'');
      ShowMessage(s);
    end;
end;


И ни каких парсеров писать не надо) 
Это собственно все, что было нужно.

Добавлено через 47 секунд
Достаточно "включить" DebugInfo
--------------------
Born to be wild
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1053 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.