Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.30;
Скачать: CL | DM;

Вниз

Как бы все-таки получить имя функции в ран тайме?   Найти похожие ветки 

 
Kolan ©   (2009-06-18 12:59) [0]

Здравствуйте!

Помню, что эта тема обсуждалась, но не помню чем дело кончилось.

Хочется мне достаточной простой вещи — получить имя функции в виде строки внутри этой самой функции.

То есть вот так:
procedure TForm1.FormCreate(Sender: TObject);
begin
 ShowMessage("FormCreate");
end;


Только чтобы "FormCreate" (или что-то подобное "TForm1.FormCreate" или "procedure TForm1.FormCreate(Sender: TObject);", например) было подставлено автоматически.

Как бы это сделать. Ведь компилятор-то видит эти имена.


 
Kolan ©   (2009-06-18 13:00) [1]

Название получилось не корректное, прошу прощения.


 
Eraser ©   (2009-06-18 13:01) [2]

> [0] Kolan ©   (18.06.09 12:59)

в published методое наверно это возможно, в остальных - нет, при нормальных условиях. ерундой занимаешься по-моему.


 
Palladin ©   (2009-06-18 13:02) [3]

http://delphimaster.net/view/1-1225802818/


 
Kolan ©   (2009-06-18 13:04) [4]

Почему ерундой? Только в published — не годится.

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


 
Eraser ©   (2009-06-18 13:09) [5]

> [4] Kolan ©   (18.06.09 13:04)
> Почему ерундой?

а зачем это может понадобиться? вот мне не очень понятно.


 
Kolan ©   (2009-06-18 13:10) [6]

Palladin, в по ссылке ответ [3]?

Не, это не годится. Слишком сложно. Для чего это мне хочется использовать:

Для конструкции вида

procedure TForm1.FormCreate(Sender: TObject);
begin
 raise Exception.Create(<вставь сюда имя метода>);
end;


Если пользоваться примером, то мне придется, как я понял, явно указать метод, а я хочу чтобы компилятор сам его вставил.


 
Kolan ©   (2009-06-18 13:11) [7]

Eraser, а нужно это для того, чтобы добавить в ошибку информацию о том где она в коде. Например в haXe такое сделать очень просто.


 
Eraser ©   (2009-06-18 13:14) [8]

> [7] Kolan ©   (18.06.09 13:11)

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


 
Игорь Шевченко ©   (2009-06-18 13:25) [9]


> Хочется мне достаточной простой вещи — получить имя функции
> в виде строки внутри этой самой функции.


при наличии сгенерированого map-файла и парсера этого map-файла или при наличии debug information и парсера debug information задача решается поиском имени по адресу функции.


 
Kolan ©   (2009-06-18 13:31) [10]

Благодарю Eraser, скачал библиотеку, посмотрю. А документация на этот инструмент есть, а то я что-то найти не могу.

Правильно ли я понял, что ответ на мой вопрос — надо написать эксперт для ИДЕ, а как — см. JEDI?


 
Kolan ©   (2009-06-18 13:32) [11]

Игорь, а парсер, конечно, писать надо, так?


 
pasha_golub ©   (2009-06-18 13:36) [12]

EurekaLog тебе в помощь. Оч. советую. Сами юзаем


 
Игорь Шевченко ©   (2009-06-18 13:39) [13]

Kolan ©   (18.06.09 13:32) [11]

Можно поискать


 
Kolan ©   (2009-06-18 13:45) [14]

pasha_golub, посмотрю, благодарю.


 
Sapersky   (2009-06-18 14:53) [15]

а парсер, конечно, писать надо, так?

Может быть это поможет:
http://delphimaster.net/view/1-1225802818/


 
Eraser ©   (2009-06-18 15:40) [16]

> [11] Kolan ©   (18.06.09 13:32)


> а парсер, конечно, писать надо, так?

ты все таки посмотри JCL, лишние вопросы задавать перестанешь )
эврика еще лучше, но платная.


 
Германн ©   (2009-06-18 17:19) [17]


> pasha_golub ©   (18.06.09 13:36) [12]
>
> EurekaLog тебе в помощь.

+1


 
Пит   (2009-06-18 17:27) [18]


> EurekaLog тебе в помощь. Оч. советую. Сами юзаем


а можно вкратце и желательно на примере пояснить ее основные фишки?


 
Германн ©   (2009-06-18 17:38) [19]


> Пит   (18.06.09 17:27) [18]
>
>
> > EurekaLog тебе в помощь. Оч. советую. Сами юзаем
>
>
> а можно вкратце и желательно на примере пояснить ее основные
> фишки?

http://eurekalog.com/tutorials.php


 
Kolan ©   (2009-06-26 13:21) [20]

EurekaLog — отличная штука, благодарю!


 
oxffff_   (2009-06-26 13:26) [21]


> Как бы все-таки получить имя функции в ран тайме?


Посмотри мой блог

For russian fellow Maaacheba or getting method name dynamically

http://santonov.blogspot.com/2009/02/for-russian-fellow-maaacheba-or-getting.html


 
oxffff_   (2009-06-26 13:38) [22]

Пример использования.

procedure TForm1.StaticMethod;
begin
showmessage(MethodName(GetMethodAddress));
end;

procedure TForm1.VirtualMethod(a,b,c,d:integer);
begin
showmessage(MethodName(GetMethodAddress));
end;


 
Kolan ©   (2009-06-26 14:39) [23]

oxffff_, посмотрел, благодарю, но, честно говоря, готовый продукт мне по сабжу полезнее самодельной мульки :)


 
TUser ©   (2009-06-26 17:10) [24]

Имхо, сабж - вредное занятие. Да, сделать можно, через RTTI или парсер исходников в ресурсе, но вредно. Функция должна что-то делать, а не называться. Такое реально может понадобиться только с случае управления поведением программы из какого-нибудь движка или ide. Но в первом случае тоже не сложно написать список функций с названиями и сгенерить модуль с их вызовами. Во всяком  случае просто и гарантировано от взлома.


 
Германн ©   (2009-06-28 01:02) [25]


> Kolan ©   (26.06.09 13:21) [20]
>
> EurekaLog — отличная штука, благодарю!
>

Кстати. Не надо считать сей продукт панацеей. Это очень хороший инструмент, но и очень сложный инструмент. И для правильного и эффективного его использования в готовой для распространения программе нужно его изучить и грамотно использовать предоставляемые им возможности. Иначе работа программы будет ещё хуже, чем без Эврики.



Страницы: 1 вся ветка

Текущий архив: 2009.08.30;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.015 c
1-1213031306
San1712
2008-06-09 21:08
2009.08.30
Как с помощью кода изменить высоту формы ?


15-1246521108
Andy BitOff
2009-07-02 11:51
2009.08.30
Помогите найти изображение...


15-1246448096
palva
2009-07-01 15:34
2009.08.30
Умерла Людмила Зыкина


2-1246352665
Цукор5
2009-06-30 13:04
2009.08.30
Сокеты. Заполнение структуры адреса сервера


1-1213600067
IntruderLab
2008-06-16 11:07
2009.08.30
Работа с BPL модулями