![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Имя процедуры [D7, XP]
Lera © (2007-02-01 11:32:00)Уважаемые профи, подскажите можно ли, находясь в какой-либо процедуре во время работы приложения, выудить имя процедуры каким-нибудь оператором, для того чтобы не прописывать имя каждой процедуры вручную. Имя необходимо для записи в файл в случае ошибки в данной процедуре.
Olivetti (2007-02-02 02:04:00) [1]А вот так будешь логи писать:
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.
Германн (2007-02-02 02:00:00) [2]
> Lera (01.02.07 11:32)
>
> Уважаемые профи, подскажите можно ли, находясь в какой-либо
> процедуре во время работы приложения, выудить имя процедуры
> каким-нибудь оператором, для того чтобы не прописывать имя
> каждой процедуры вручную. Имя необходимо для записи в файл
> в случае ошибки в данной процедуре.
>
Не сочтите сей пост за рекламу, но предложу автору найти возможность изыскать не очень большие деньги и купить EurekaLog. Очень проработанная и полезная штучка!
Olivetti (2007-02-02 01:57:00) [3]в хелпе написано, что assert "Tests whether a Boolean expression is true". Причем здесь имя прцедуры ума не приложу!!??
Не к тому месту прикладываешь.
Кинь на форму кнопку, двойной клик по ней, и в обработчике напиши:
ASSERT(FALSE, 'Ошибка, однако');
Откомпилируй и запусти на выполнение.
Нажми на кнопку, и посмотри, какое сообщениевыдается.
А уж потом прикладывай этот, как ты его назвала... а, ум.
Dmitrij_K (2007-02-02 01:11:00) [4]http://www.madshi.net/madExceptDescription.htmвсе покажет.
http://www.madshi.net/flashIntroduction.htm- demo
Anatoly Podgoretsky (2007-02-01 19:27:00) [5]> Lera (01.02.2007 12:12:06) [6]
А зачем, если
The message is displayed along with the complete path, filename, and the line numberon which Assert failed.
Что гораздо точнее, чем имя процедуры, неизвестно где.
Vlad Oshin (2007-02-01 14:43:00) [6]да, надо идти другим путем
в принципе, можно получить состояние регистра 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('процедура такая- ошибка така');
:)
Сергей М. (2007-02-01 12:46:00) [7]Тогда тебе придется изменить саму концепцию регистрации и обработки твоих ошибок, перебазировав ее на исключения.
Lera (2007-02-01 12:33:00) [8]потому что есть схожие диагностики, а в какой процедуре неизвестно
Сергей М. (2007-02-01 12:27:00) [9]
> ошибкой считается моя собственная диагностика
Чудесно. А зачем тогда тебе имя процедуры ? Пиши в файл сразу результаты этой диагностики.
Ega23 (2007-02-01 12:25:00) [10]
> ошибкой считается моя собственная диагностика и выход из
> процедуры по моему велению
try
.....
except on E:Exception do
begin
LogTo(.....);
raise Exception.Create(E.Message);
end;
end;
Lera (2007-02-01 12:21:00) [11]ошибкой считается моя собственная диагностика и выход из процедуры по моему велению
Сергей М. (2007-02-01 12:17:00) [12]
> в случае ошибки в данной процедуре
Что считается "ошибкой" ?
Плохиш (2007-02-01 12:16:00) [13]
> Lera (01.02.07 12:12) [6]
Во время выполнения программы у процедур/функций и переменных нет никаких имён.
Lera (2007-02-01 12:12:00) [14]в хелпе написано, что assert "Tests whether a Boolean expression is true". Причем здесь имя прцедуры ума не приложу!!??
Olivetti (2007-02-01 12:06:00) [15]ASSERT()
Lera (2007-02-01 12:03:00) [16]Ega23, каким всетаки оператором? Ответте, прошу вас.
Lera (2007-02-01 11:51:00) [17]Скажите пожалуйста каким оператором это можно?
Lera (2007-02-01 11:37:00) [18]а как?
Ega23 (2007-02-01 11:33:00) [19]Если это published-метод - легко.
В общем случае, AFAIK, нельзя.