Форум: "Начинающим";
Текущий архив: 2008.10.12;
Скачать: [xml.tar.bz2];
ВнизКак получить подробную информацию об ошибке рантайма? Найти похожие ветки
← →
Abcdef123 (2008-09-01 06:02) [0]Здравствуйте, Мастера.
Можно ли получить более подробное сообщение об ошибке рантайма?Дело в том, что у меня программа работает нормально, а у клиента выскакивает ошибка "List Index out of bounds(0)"
Я знаю, что означает эта ошибка, но хотелось бы конкретнее узнать, какой объект выдает ошибку (дело в том, что в этой программе несколько стринглистов используется, и трудно представить, в каком месте программы возникает эта ошибка. Причем клиент говорит, что ошибка возникает не каждый раз, то есть закономерность повторения ошибки не знаем. Я думаю, хорошо бы вставить в программу выдачу более подробной информации об ошибке, но я не знаю как. На данный момент в моем проекте просто считывается и выдается в случае ошибки Exception.Message.
Подскажите, что можно сделать?
← →
Урсулапов (2008-09-01 08:02) [1]Ну эта... Вроде нужно пройтись с F8. Где выскакивает ошибка - там и ошибка, извините за каламбур.
← →
@!!ex © (2008-09-01 08:28) [2]> [1] Урсулапов (01.09.08 08:02)
ага.. поехать к клиенту, установить на его компе дельфи... класс. :))
автор, веди лог проиходящего.
← →
Abcdef123 (2008-09-01 09:44) [3]to [1]
Да, это нереально поехать к клиенту и делать дебаг на компе клиента, а на моем работает нормально.
to [2] Извините, может примитивный вопрос, просто мне не приходилось это делать - А как вести лог происходящего?
← →
@!!ex © (2008-09-01 10:00) [4]> [3] Abcdef123 (01.09.08 09:44)
type
TLogFile = class
protected
FFile:TextFile;
public
Constructor Create(const FileName:string);
Destructor Destroy(); override;
Procedure Add(const s:string);
end;
Constructor TLogFile.Create(const FileName:string);
begin
AssignFile(FFile,FileName);
Rewrite(FFile);
end;
Destructor TLogFile.Destroy();
begin
CloseFile(FFile);
inherited;
end;
Procedure TLogFile.Add(const s:string);
begin
Writeln(FFile,s);
Flush(FFile);
end;
← →
DrPass © (2008-09-01 10:10) [5]
> Можно ли получить более подробное сообщение об ошибке рантайма?
Проще всего установить на Delphi трейсер ошибок, например, EurekaLog или MadExcept, и скомпилировать программу с ним.
← →
Плохиш © (2008-09-01 10:13) [6]
> Проще всего установить на Delphi трейсер ошибок
Вообще-то, проще посмотреть исходник на предмет обращения к нулевому элементу или попытки удаления оного в пустом списке :-)
← →
oldman © (2008-09-01 10:15) [7]
> а у клиента выскакивает ошибка "List Index out of bounds(0)
Автор, у тебя ошибка в программе.
← →
Abcdef123 (2008-09-01 10:21) [8]to [4]
Спасибо за код, но как я поняла, это описание(объявление) самого типа TLogFile. А как его использовать в проекте? То есть в каком месте надо обхявлять о его создании и где вызывать запись,
и что будет параметром s в процедуре TLogFile.Add(const s:string);
← →
@!!ex © (2008-09-01 10:22) [9]> [8] Abcdef123 (01.09.08 10:21)
С паскалью совсем не дружишь?
ДОгадаться что за параметр в процедуре Add так сложно?
← →
Abcdef123 (2008-09-01 10:30) [10]To [8]
Прошу прощения, - вопрос о параметре снимается (мне стыдно)
А вот как все же привязать создание этих логов в проекте не догоняю :-\
← →
Плохиш © (2008-09-01 10:34) [11]
> А вот как все же привязать создание этих логов в проекте
> не догоняю
Стоит нанять программиста и дать ему для начала посмотреть ваш глюкокод.
← →
Abcdef123 (2008-09-01 10:47) [12]To [11]
да в том то и дело, что там где глючит - не моя программа, а написана программистом, который сейчас за свою работу в другой компании шикарно зарабатывает. И эта программа используется в нескольких проектах, никогда проблемы нам не создавала, только вот один клиент проблему высказал, и то она не всегда возникает, закономерности не может уловить.
>Стоит нанять программиста
ну а насчет этого комментария - вам нравится обижать людей? Все когда-то что-то делают первый раз, и ничего нет плохого в том, чтобы задать пусть даже примитивный вопрос. Со временем и я буду считать этот вопрос примитивным. Лучше учиться (задавая вопросы), чем ничего не делать.
← →
Медвежонок Пятачок © (2008-09-01 10:51) [13]Со временем и я буду считать этот вопрос примитивным.
А пока найми программиста
← →
@!!ex © (2008-09-01 10:52) [14]> [10] Abcdef123 (01.09.08 10:30)
> To [8]
> Прошу прощения, - вопрос о параметре снимается (мне стыдно)
>
>
> А вот как все же привязать создание этих логов в проекте
> не догоняю :-\if SomeListBox.Lines.Count=0 then begin
GlobalLogFile.Add("SomeListBox.Lines.Count=0");
end;
Ну или что-то в этом роде.
Хотя в вашем конкретном случае я бы повесил логирование на каждое действия обращения к 0 элементу листбокса. ТОгда сразу будет видно по логу где упало, когда упадет.
← →
Плохиш © (2008-09-01 10:53) [15]
> Abcdef123 (01.09.08 10:47) [12]
> >Стоит нанять программиста
> ну а насчет этого комментария - вам нравится обижать людей?
Ну во-первых, мне не нравиться обижать людей, но я не люблю людей которые занимают чужое место.
А во-вторых, судя по [8] Вы пытаетесь заменить чтение книг по основам программирования вопросами на форуме.
← →
Vlad Oshin © (2008-09-01 12:13) [16]
> А вот как все же привязать создание этих логов в проекте
> не догоняю :-\
заворачивать в конструкцию try except
try
//Полезный код
ADOConnection1.Connected:=true;//например
except
on E:Exception do
begin
GlobalLogFile.Add("//Полезный код"+E.ClassName+e.Message);
raise; //или без этой строки, если не нужно показывать ошибку или считаете, что она обработатна
end;
end;
← →
Abcdef123 (2008-09-01 12:24) [17]To [15]
>я не люблю людей которые занимают чужое место.
Если вы согласитесь работать за такую зарплату в фирме, где я работаю, то я вам уступлю это "чужое" место. Хозяин этой фирмы платит мало, так что очень продвинутые программисты сюда не идут. Вообще место программиста анализировать как "занимать чужое место" на мой взгляд не логично. Это не кресло начальника. И у каждого в жизни есть своя ниша, я, например, не претендую считать себя супер программером, и у меня хватило бы ума не претендовать на ваше место, или чье-то другое, которое мне не по плечу.
>Вы пытаетесь заменить чтение книг по основам программирования вопросами на форуме
Ну тут вы не правы в принципе, так как я читаю книги тоже. Я задаю здесь вопросы согласно правилам форума, и если я задала вопрос, на который отвечать долго, то можно было просто дать ссылку, какую литературу почитать по данному вопросу, а не обижать без причины.
Большое спасибо @!!ex. Вы мне помогли! Я поняла!
← →
Медвежонок Пятачок © (2008-09-01 12:48) [18]Корнет, вы - женщина?!
← →
Anatoly Podgoretsky © (2008-09-01 13:07) [19]> Abcdef123 (01.09.2008 10:47:12) [12]
Исходники есть? Если есть, то во всех местах где есть обращение к ListBox.
Ошибка простая, в какой то ListBox ничего не попало, но зато есть обращение к нулевому элементу без проверки на допустимость такого обращения. Хорошо, что хоть проверка диапазонов включена, иначе бы ошибки были по AV
← →
Vlad Oshin © (2008-09-01 13:43) [20]а еще удобнее, жать ctrl shift G
try
//ctrl shift G, получаем что-то вроде: ["{F560BE95-8E7B-4CCB-8D20-072B7C60980C}"], комментируем строку, итого имеем
// ["{F560BE95-8E7B-4CCB-8D20-072B7C60980C}"]
ADOConnection1.Connected:=true;//например
except
on E:Exception do
begin
GlobalLogFile.Add("F560BE95-8E7B-4CCB-8D20-072B7C60980C"+E.ClassName+e.Message); // сюда вставим этот GUID
raise; //или без этой строки, если не нужно показывать ошибку или считаете, что она обработатна
end;
end;
Затем, анализируя лог, копируем строчку(guid) и ищем в файлах(search-find in files) этот GUID.
← →
Vayrus (2008-09-02 10:29) [21]
> Ошибка простая, в какой то ListBox ничего не попало, но
> зато есть обращение к нулевому элементу без проверки на
> допустимость такого обращения.
Такая ошибка обычно возникает если пользователь обращается к неотмеченной строчке в списке. Т.е. он жмет, например, кнопку удалить, а в списке то элемент не выбран!
При каждом обращении к любому ListBox делайте в начале проверку примерно такого содержания:
if ListBox1.ItemIndex = 0 then
begin
ShowMessage("Элемент не выбран!");
EXIT;
end;
Или что то в этом духе, в зависимости от условий, н-р,
if ListBox1.Items.Count = 0 then EXIT;
или
if ListBox1.SelCount = 0 then EXIT;
← →
Плохиш © (2008-09-02 12:10) [22]
> if ListBox1.ItemIndex = 0 then
> begin
> ShowMessage("Элемент не выбран!");
Врать не надо.
← →
@!!ex © (2008-09-02 12:42) [23]> [21] Vayrus (02.09.08 10:29)
Не выбранный элемент - это минус 1.
← →
Vayrus (2008-09-02 14:35) [24]> Врать не надо.
Я и не вру, человеку свойственно ошибаться.
← →
Vayrus (2008-09-02 14:37) [25]Удалено модератором
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.10.12;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.038 c