|
|
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
Как определить на Delphi имя выполняемой процедуры внутри неё же? На фокспро делается просто: текст файла test.prg: Код: plaintext 1. 2. 3. программка выводит на экранprogram: TEST , procedure= P_PROC А надо в Delphi. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2010, 18:54 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
Now IIА надо в Delphi. Код: plaintext 1. 2. 3. 4. 5. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2010, 18:57 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
никак ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2010, 18:57 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
может через JCL или EurekaLog взять стек и вычленить из него название.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2010, 19:23 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
А для какой задачи надо знать имя процедуры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2010, 19:29 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
Now II, Не надо забывать, что фокспро есть интерпретатор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2010, 21:58 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
Вообще можно определить, при условии, что это не процедура, а метод класса, и она содержится в rtti (т.е для версий ниже d2010, в секции published). например, пробежать по vmtMethodTable, в поисках наибольшего адреса, меньшего адреса вызова. по-быстрому получился такой вариант: (без учета данных из extended rtti для d2010+) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2010, 23:36 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
всмысле CalledMethName(Self) конечно-же ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2010, 23:46 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
Вообще можно летать, при условии, что это не велик, а дельтаплан, и погода лётная ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2010, 01:25 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
JohnmenNow II, Не надо забывать, что фокспро есть интерпретатор. Помним, но он уже давно умеет делать исполнимые файлы. И даже с embeded БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2010, 09:27 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov , твой ответ победил в номинации "самая смешная шутка" в этой теме :) Зайцев Фёдор , спасибо за ответ! Zelius , а можно поподробнее? я чайник, но довольно умный (или любопытный), разберусь :) Это же внешние программы? Моя прога работает у пользователя, не на моем компе. Хотелось бы обойтись внутренними средствами самой программы. Кроик Семён А для какой задачи надо знать имя процедуры? Возник вопрос так. Есть один пользователь у моей проги (Delphi+Oracle), у которого часто теряется связь с БД. Хочу записывать в лог на вывозе какой функции произошла потеря связи. В основном это нужно для TAction OnEхecute. Но потом стало интересно заодно, как узнать и имя просто процедуры. Johnmen , я помню, что у фокса интерпретатор! но для меня не само собой разумеется, что если у Delphi компилятор, то нельзя узнать имя процедуры при её выполнении. Тем более, что вот метод класса тоже процедура, а для неё, оказывается, можно. На велике, кста, тоже можно летать даже при нелетной погоде, если на рампе, но не все умеют ;-) A V !!! спасибо, друг! Победитель в номинации самый полезный ответ!! спасибо преогромное! Все работает 8) Хотела из любой процедуры узнать её имя, не только из метода класса, но всё равно здорово, это как раз то, что мне надо было в реальной задаче! У меня Delphi7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2010, 13:10 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
"на вызове" )) ну вы поняли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2010, 13:14 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
Now IIDimitry Sibiryakov, твой ответ победил в номинации "самая смешная шутка" в этой теме :) Какая шутка? У меня на самом деле каждый вызов в DB-слое имеет свой собственный код, который попадает в выброшенное исключение и таким образом позволяет определить место ошибки с точностью до строки. А для OnExecute всё ещё проще - там есть параметр Sender, а у него куча интересных свойств, по которым можно легко определить на что именно ткнул пользователь. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2010, 13:25 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
Дмитрий , я не спорю, что так можно сделать, но я искала общее решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2010, 14:18 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
Now IIЕсть один пользователь у моей проги (Delphi+Oracle), у которого часто теряется связь с БД. Хочу записывать в лог на вывозе какой функции произошла потеря связи. В основном это нужно для TAction OnEхecute. Но потом стало интересно заодно, как узнать и имя просто процедуры. Eсть такой Delphi-эксперт: SmartInspect . Он вставляет во всем проекте на входе и выходе из каждой процедуры вызовы логирующих процедур. Очень подходит для твоего случая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2010, 20:10 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
Now II, Если есть деньги - советую купить EurekaLog - он позволяет видеть стек ошибки, эксепшена, плюс много доп инфы о компутере клиента. Но если нет, JCL тоже показывает стек ошибки с названиями процедур, это как раз то что тебе надо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2010, 21:06 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
авторНо если нет, JCL тоже показывает стек ошибки с названиями процедур, это как раз то что тебе надо... Это откуда такой вывод? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2010, 21:11 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
JohnmenавторНо если нет, JCL тоже показывает стек ошибки с названиями процедур, это как раз то что тебе надо... Это откуда такой вывод? Это личный опыт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2010, 11:05 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
ZeliusEurekaLog - он позволяет видеть стек ошибки, эксепшена, плюс много доп инфы о компутере клиента Кто знает, а у CodeSiteLogging есть такая возможность? А вообще, в Delphi за почти 10 лет что-то изменилось в этом плане? У современных версий можно узнать имя процедуры/функции внутри самой исполняемой процедуры/функции? Само собой, что это должно касаться и private секции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2019, 15:24 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
X11, ну зачем тебе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2019, 17:02 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
если внутри нее же, то это ваша процедура, правильно? ну, пропишите им всем procedure MyProc; const sProcName = "MyProc"; begin <Banzai> end. непонятна задача, извините. зачем внутри процедуры _определять_ ее имя? для логов, или там у вас куча процедур в виде коллбэков и надо понимать что именно сработало? или еще какая магия? чтобы корректно ответить на ваш вопрос, надо хотя бы примерно понимать конечную задачу. чтобы любая _ваша_ процедура знала, как ее зовут - достаточно просто ей это сказать. если это чужая процедура - то там уже начинается нетривиальный цирк с конями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2019, 04:15 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
из своего опыта могу сказать, что (для меня) сабж был актуален в одном редком случае - когда надо логгировать вход-выход в критсекцию, чтобы найти виновника лока. Когда одна критсекция (кешер, например) может использоваться во многих десятках процедур - прописывать а потом убирать их всех руками становится малоинтересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2019, 07:40 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
X11у CodeSiteLogging есть такая возможность?если только снаружи ему передавать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2019, 09:52 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
JCL позволяет получить call stack. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2019, 10:50 |
|
||
|
определить имя выполняемой процедуры
|
|||
|---|---|---|---|
|
#18+
Есть Delphi language Preprocessor - https://sourceforge.net/projects/dpp32/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2019, 10:59 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=37009158&tid=2037733]: |
0ms |
get settings: |
7ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
145ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 401ms |

| 0 / 0 |
