Форум: "Начинающим";
Текущий архив: 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.061 c