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

Вниз

Имя процедуры   Найти похожие ветки 

 
Lera   (2007-02-01 11:32) [0]

Уважаемые профи, подскажите можно ли, находясь в какой-либо процедуре во время работы приложения, выудить имя процедуры каким-нибудь оператором, для того чтобы не прописывать имя каждой процедуры вручную. Имя необходимо для записи в файл в случае ошибки в данной процедуре.


 
Ega23 ©   (2007-02-01 11:33) [1]

Если это published-метод - легко.
В общем случае, AFAIK, нельзя.


 
Lera   (2007-02-01 11:37) [2]

а как?


 
Lera   (2007-02-01 11:51) [3]

Скажите пожалуйста каким оператором это можно?


 
Lera   (2007-02-01 12:03) [4]

Ega23, каким всетаки оператором? Ответте, прошу вас.


 
Olivetti   (2007-02-01 12:06) [5]

ASSERT()


 
Lera   (2007-02-01 12:12) [6]

в хелпе написано, что assert "Tests whether a Boolean expression is true". Причем здесь имя прцедуры ума не приложу!!??


 
Плохиш ©   (2007-02-01 12:16) [7]


> Lera   (01.02.07 12:12) [6]

Во время выполнения программы у процедур/функций и переменных нет никаких имён.


 
Сергей М. ©   (2007-02-01 12:17) [8]


> в случае ошибки в данной процедуре


Что считается "ошибкой" ?


 
Lera   (2007-02-01 12:21) [9]

ошибкой считается моя собственная диагностика и выход из процедуры по моему велению


 
Ega23 ©   (2007-02-01 12:25) [10]


> ошибкой считается моя собственная диагностика и выход из
> процедуры по моему велению


try
.....
except on E:Exception do
begin
  LogTo(.....);
  raise Exception.Create(E.Message);
end;
end;


 
Сергей М. ©   (2007-02-01 12:27) [11]


> ошибкой считается моя собственная диагностика


Чудесно. А зачем тогда тебе имя процедуры ? Пиши в файл сразу результаты этой диагностики.


 
Lera   (2007-02-01 12:33) [12]

потому что есть схожие диагностики, а в какой процедуре неизвестно


 
Сергей М. ©   (2007-02-01 12:46) [13]

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


 
Vlad Oshin ©   (2007-02-01 14:43) [14]

да, надо идти другим путем

в принципе, можно получить состояние регистра EIP, разного для каждого места в программе :)
procedure TForm1.Button1Click(Sender: TObject);
label m1;
var
s:string;
a: longint;
begin
asm
call m1;
m1:
pop a
end;
s:=inttostr(a);
Showmessage(s);
end;

но проще написать по-честному Showmessage("процедура такая- ошибка така");
:)


 
Anatoly Podgoretsky ©   (2007-02-01 19:27) [15]

> Lera  (01.02.2007 12:12:06)  [6]

А зачем, если

The message is displayed along with the complete path, filename, and the line number on which Assert failed.

Что гораздо точнее, чем имя процедуры, неизвестно где.


 
Dmitrij_K   (2007-02-02 01:11) [16]

http://www.madshi.net/madExceptDescription.htm все покажет.
http://www.madshi.net/flashIntroduction.htm - demo


 
Olivetti   (2007-02-02 01:57) [17]

в хелпе написано, что assert "Tests whether a Boolean expression is true". Причем здесь имя прцедуры ума не приложу!!??

Не к тому месту прикладываешь.
Кинь на форму кнопку, двойной клик по ней, и в обработчике напиши:

ASSERT(FALSE, "Ошибка, однако");

Откомпилируй и запусти на выполнение.
Нажми на кнопку, и посмотри, какое сообщение выдается.

А уж потом прикладывай этот, как ты его назвала... а, ум.


 
Германн ©   (2007-02-02 02:00) [18]


> Lera   (01.02.07 11:32)
>
> Уважаемые профи, подскажите можно ли, находясь в какой-либо
> процедуре во время работы приложения, выудить имя процедуры
> каким-нибудь оператором, для того чтобы не прописывать имя
> каждой процедуры вручную. Имя необходимо для записи в файл
> в случае ошибки в данной процедуре.
>

Не сочтите сей пост за рекламу, но предложу автору найти возможность изыскать не очень большие деньги и купить EurekaLog. Очень проработанная и полезная штучка!


 
Olivetti   (2007-02-02 02:04) [19]

А вот так будешь логи писать:

var
 __OldAssertErrorProc: TAssertErrorProc;

procedure __AssertErrorProc(const Message, Filename: string; LineNumber: Integer; ErrorAddr: Pointer);
begin
 Log("ASSERTION: " + Message + ". File name: " + FileName + ". Line number: " + IntToStr(LineNumber) + ". At address: " + IntToHex(cardinal(ErrorAddr), 8) + ".");
 Abort;
end;

initialization
 __OldAssertErrorProc := AssertErrorProc;
 AssertErrorProc := __AssertErrorProc;

finalization
 AssertErrorProc := __OldAssertErrorProc;

end.



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

Форум: "Начинающим";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.039 c
2-1170165325
Arm79
2007-01-30 16:55
2007.02.18
Каким способом лучше всего собрать из байтов Integer?


6-1158149691
KyRo
2006-09-13 16:14
2007.02.18
Есть ли соединение по сети ?


15-1169692922
IMHO
2007-01-25 05:42
2007.02.18
Солженицын велик?


3-1164250027
~SerJant~
2006-11-23 05:47
2007.02.18
Использование FastReport (TfrxBDEDataBase)


15-1169945476
POP
2007-01-28 03:51
2007.02.18
Shareware софт, работа с клиентурой.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский