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

Вниз

Нету ли директивы компилятора, которая показывает строку в коде   Найти похожие ветки 

 
Song   (2003-08-30 18:06) [0]

где эта директива стоит?
Давно хотел узнать.


 
Song   (2003-08-30 18:07) [1]

В смысле её номер.


 
Юрий Зотов   (2003-08-30 18:41) [2]

Директивы нет, но можно использовать Assert с отловом Exception (можно и глобальным). В сообщении есть номер строки, парсится элементарно.


 
Song   (2003-08-30 18:50) [3]

Хотелось бы чего-нибудь такого:

MessageDlg("... Ошибка. Код ошибки: "+SysErrorMessage(GetLastError+". CurrentUnit x "+{$LineNumber}+". Обратитесь к разработчику.",mtError,[mbOk],0);

А как через Assert.. даже пока не представляю, сейчас гляну.


 
Юрий Зотов   (2003-08-30 19:10) [4]

В нужных местах просто вызываете Assert, а в OnExeption получаете сообщение с номером строки вызова.


 
Anatoly Podgoretsky   (2003-08-30 19:19) [5]

Кроме Assert вроде ничего нет


 
vuk   (2003-08-30 19:20) [6]

По большому счету, если нужно знать, где ошибка произошла, то можно попробовать использовать трассировку стека исключений из JVCL. Правда там понадобится либо отладочная информация либо .map файл.


 
Avsam   (2003-08-31 00:33) [7]

{$LineNumber} - что это?


 
Anatoly Podgoretsky   (2003-08-31 00:52) [8]

Avsam © (31.08.03 00:33) [7]
Это где?


 
Alex Konshin   (2003-08-31 03:13) [9]

В JCL есть, там целый раздел посвящен использованию отладочной информации.
Смотри http://sourceforge.net/projects/jcl/


 
Song   (2003-08-31 09:54) [10]

2[7] Avsam © (31.08.03 00:33)

> {$LineNumber} - что это?


Я ж написал: "хотелось бы"


 
Song   (2003-09-03 13:16) [11]

Сделал через Assert, строчку в тексте выцепляю,но повилась проблема.


Var ErrorLineNumber: String; // глобальная

procedure TMain.FormCreate(Sender: TObject);
begin
With Application Do
Begin
onMessage:=OnMessageProc;
onException:=onExceptionProc;
End; {With}
end;

procedure TMain.onExceptionProc(Sender: TObject; E: Exception);
Var S: String;
begin
IF Pos("line",E.Message)>0 then
Begin
S:=E.Message;
S:=Copy(S,Pos("line",S)+5,Length(S));
ErrorLineNumber:=Copy(S,1,Length(S)-1);
Application.HandleException(Sender);
End else
{ ????? ?????? ????????? ?? ?????? }
Begin
NewSp5Form.MakeSound(300,300);
MessageDlg("?????????? ???????????? ??????. ??? ??????: "+E.Message+"."#13#10+
"??? ?????????? ???????? ???????? ? ?????????? ?????????? ? ????????????, ?????? ??????? ? ???????? ????????????? ??????.",mtError,[mbOk],0);
End; {else}
end;

Из другого модуля

try
...
// Здесь что-то, что может привести к исключению
except
{ Достаём номер строчки }
Assert(False);
MessageDlg("Ошибка. Код ошибки: "+SysErrorMessage(GetLastError)+". Модуль XXX x "+ErrorLineNumber,mtError,[mbOk],0);
end;

Вроде всё должно работать, т.е. перед выводом сообщения о ошибке получаем номер строки, для этого вызываем Assert, а потом передаём этот номер в MessageDlg(). Но вызов Assert даёт исключение EAssertException, что прерывает ход программы и MessageDlg() не запускается. Как лечить?


 
Song   (2003-09-03 13:17) [12]

Вот этой строчки быть не должно: Application.HandleException(Sender)


 
Song   (2003-09-03 15:14) [13]

Всем спасибо, кто заинтересовался.
Вопрос решил, правда грубовато, но решил.



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

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

Наверх





Память: 0.47 MB
Время: 0.011 c
1-48521
elf
2003-09-02 15:15
2003.09.15
сравнение строк


1-48563
BOA_KAA
2003-09-04 12:54
2003.09.15
TFileStream & String


1-48498
Calm
2003-09-02 17:13
2003.09.15
Корректно ли создать в методе TThread.Execute VCL-компоненты?


3-48448
Навичек
2003-08-25 04:22
2003.09.15
Ошибка с ADO Delphi 5


4-48842
Timoty
2003-07-15 23:44
2003.09.15
Как поменять цвет полосы прокрутки и заголовка окна?





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