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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.035 c
9-1144152298
sprid
2006-04-04 16:04
2007.02.18
Справка по DirectX


11-1148041898
vvedensky
2006-05-19 16:31
2007.02.18
IRC и KOL


1-1166799546
i-am-vladko
2006-12-22 17:59
2007.02.18
file not found


2-1170311382
Lapushka-dochka
2007-02-01 09:29
2007.02.18
Как написать записть в Stream


15-1169032453
PZ
2007-01-17 14:14
2007.02.18
Призрак в актовом зале (?)