Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.08.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.005 c
1-1213336156
Anton
2008-06-13 09:49
2009.08.30
отладка библиотеки


3-1226507367
DOjD
2008-11-12 19:29
2009.08.30
Работа с ZQuery LOCAL


2-1246303725
Dm
2009-06-29 23:28
2009.08.30
Ctrl+Tab, эмуляция в чужом окне.


15-1246363341
Геннадий
2009-06-30 16:02
2009.08.30
Возможно ли в Делфи сделать такое появление формы???


2-1246521017
belmol
2009-07-02 11:50
2009.08.30
CopyFiles отключить контроль ошибок





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский