Форум: "Начинающим";
Текущий архив: 2012.02.26;
Скачать: [xml.tar.bz2];
ВнизПроблема с дебагером в Delphi 2010 Найти похожие ветки
← →
nick_delphi2010 (2011-11-12 14:13) [0]Всем привет. У меня проблема с дебагером. При выполнении приложения если в коде есть попытка доступа к полю не созданного экземпляра класса или пустого (nil) то приложение просто закрывается не выдавая никакого исключения, и мне приходится перезапускать и трасировать пока не дойду до этой ошибки, при этом я могу только предполагать где оно вылетело. Ужасно не удобно, меня это очень печалит. Заметил ещё что если в коде сделать:
>>>
Код Delphi
x:=100/0;
writeln(x);
>>>
то никаких исключений деления на ноль тоже нет, а в консоль выводит строку " +Inf".
Может кто то знает где галочку поставить или убрать в настройках дебагера, или может есть директива какая то которую нужно подключить/отключить. Спасите ребята от потерь драгоценного времени и нервов :(
Версия делфи: Embarcadero® Delphi® XE Version 15.0.3890.34076
← →
Rouse_ © (2011-11-12 14:21) [1]Мошт какой нибуть эксперт установленный глючит?
← →
nick_delphi2010 (2011-11-12 14:28) [2]понятия не имею :) но мне бы какое то решение... :(
← →
sniknik © (2011-11-12 14:34) [3]> понятия не имею :)
а кто имеет? кто даже близко твой комп не видел, и не в курсе, что ты туда вообще ставил.
> но мне бы какое то решение... :(
удали все.
← →
Ega23 © (2011-11-12 15:10) [4]
> Может кто то знает где галочку поставить или убрать в настройках
> дебагера,
Tools -> Options -> Debugger Options (оно в самом конце).
Может там что отключил?
И эта, определись уже, 2010 Delphi или XE :)
← →
nick_delphi2010 (2011-11-12 15:21) [5]sniknik в том то и дело что я просто качнул и установил Delphi XE. Может как то можно поудалять из него эти эксперты, подскажи пожалуйста.
Ega23 повключал все галочки, не помогло :( Определяюсь Delphi XE :)
← →
Dimka Maslov © (2011-11-12 15:26) [6]Возникновение исключений при делении на ноль определяется не отдадчиков, а состоянием флагов сопроцессора, которое едино для всех процессов в системе. Cм. System.Get/Set8087CW
Действие программы и отладчика в момент ошибки доступа зависит от состояния глобальных переменных, отвечающих за обработку исключений См. SysUtils.InitExceptions
← →
Dimka Maslov © (2011-11-12 15:27) [7]В догонку:
Наверняка к проекту подключен какой-то модуль(компонент) который и меняет состояние окружения.
← →
nick_delphi2010 (2011-11-12 15:49) [8]Dimka Maslov
Насчёт деления на ноль, может оно и не должно выдавать окно экзепшна?
Я попробовал создать новое консольное приложение и сразу в теле программы begin
writeln(floattostr(100/0));
end
Выдало просто мессагу со словом "INF" ничего более, никаких ошибок. То же самое решил попробовать в Delphi 7 (проэкт у меня не получится свой там запустить, я дженерики использую), в общем та же картина. просто сообщение "INF".
P.S. Ребят, забыл уточнить что я осваиваю среду Delphi потому не пинайте сильно если что не так объясняю.
← →
Германн © (2011-11-12 16:04) [9]
> Я попробовал создать новое консольное приложение и сразу
> в теле программы begin
> writeln(floattostr(100/0));
> end
> Выдало просто мессагу со словом "INF" ничего более, никаких
> ошибок.
Компилятор то не дурак. Он просто не стал включать в исполняемый код эту очевидную ошибку.
← →
Dennis I. Komarov © (2011-11-12 16:38) [10]Сорри за оффтоп
> Dimka Maslov ©
Нет желания md5.pas переделать под UniStings?
← →
Ega23 © (2011-11-12 16:53) [11]
> Я попробовал создать новое консольное приложение и сразу
> в теле программы
1. Создай новый консольный проект.
2. Текст такой:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
aStr: string;
begin
try
Readln(aStr);
Writeln(FloatToStr(100/StrToInt(aStr)));
except
on E: Exception do
Writeln(E.ClassName, ": ", E.Message);
end;
Readln;
end.
3. Скомпиляй, запусти.
4. Введи 0
5. О результатах отпиши сюда. Можешь в виде скриншота.
← →
nick_delphi2010 (2011-11-12 17:19) [12]Ega23
хм... произошло исключение :)
http://savepic.su/663179.jpg
неужто я в своём проекте что то намутил?
← →
nick_delphi2010 (2011-11-12 17:21) [13]а пардон, это трайкетч, я на радостях даже код не посмотрел :)
← →
nick_delphi2010 (2011-11-12 17:23) [14]оно то конечно хорошо что трайкетч, только мне трудно будет предусмотреть все такие ошибки и завернуть их :(
← →
nick_delphi2010 (2011-11-12 18:08) [15]Ega23 Кажется ты был прав. Я не все опции посмотрел там где ты говорил. В развороте дерева были вкладки Language Exception и Native OS Exception.
Вот ссылки на скрины моих настроек в данных вкладках
http://savepic.su/691840.jpg
http://savepic.su/672384.jpg
Печёнкой чую тут собака зарыта.
Dimka Maslov может таки я где то и намутил в настройках (правда я точно помню что никуда старался не лезть).
← →
sniknik © (2011-11-13 00:41) [16]> просто сообщение "INF".
вполне допустимо в некоторых случаях... еще может быть NAN. не ошибка.
If the given value is a NAN (not-a-number), the resulting string is "NAN". If the given value is positive infinity, the resulting string is "INF". If the given value is negative infinity, the resulting string is "-INF".
← →
Dimka Maslov © (2011-11-13 16:24) [17]
> может таки я где то и намутил в настройках
Всё возможно.
Что же касается деления на ноль - внимательно изучаем описание ассемблерных команд fstcw и fldcw, дабы понять какие параметры надо передавать в функции Get8087CW и Sey8087CW дабы добиться желаемого результата.
> Dennis I. Komarov © (12.11.11 16:38) [10]
Что такое UniStings (УниЖала?) :)
Работа MD5 не зависит от разрядности строк. Если же особенно хочется пользоваться ф-цией MD5String модифицируем её как
Result:=MD5Buffer(PChar(S)^, Length(S) * SizeOf(Char));
При этом отмечу, что раз внутренная структура строк поменялась, что и результат работы теперь будет другой. Это надо понимать.
← →
Dennis I. Komarov © (2011-11-13 18:58) [18]
> Dimka Maslov © (13.11.11 16:24) [17]
Да все понятно, просто модуль твой, я из уважения сам не хочу его править :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2012.02.26;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.004 c