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

Вниз

Отладка в VS.Net 2003   Найти похожие ветки 

 
ilya39 ©   (2005-12-22 14:12) [0]

Почему VS.Net при возникновении в приложении "unhandled exception" всегда завершает отлаживаемое приложение?

Ну например:

Visual Studio .Net 2003, С#.

 int  i = int.Parse(textBox1.Text);


Delphi 7. Тоже самое:

 var i: integer;
 ...
 i := StrToInt(Edit1.Text);


Допустим. Текст Edit-a (TextBox-а) в том и другом случае равен: "qwe", т.е. в случае С# мы получим System.FormatException, а в случае Delphi EConvertError.
Так вот, в Delphi можно продолжить выполнение приложения, а в Visual Studio - почему-то нет! Можно выбрать break или continue, но в любом случае потом при нажатии Run приложение завершается? Кто мне подскажет: может это где-то настраивается? Сильно мешает! Как кстати, будет в этой ситуации вести себя Delphi 2005 (или тут дело не в среде разработки)?


 
Skyle ©   (2005-12-22 14:27) [1]

Может быть дело в том, что в Delphi есть обработчик по умолчанию, Application.OnException?


 
DiamondShark ©   (2005-12-22 14:34) [2]

Потому и завершает, что оно анхэндлед.

А с какой точки Вы предлагаете продолжать выполнение при возникновении необработанного исключения?


 
ilya39 ©   (2005-12-22 14:37) [3]


>  [1] Skyle ©   (22.12.05 14:27)

Ну это здесь совсем не причем. Или Вы не поняли о чем я вообще. Толку от этого Application.OnException если он = nil
И в C# есть Application.ThreadException и AppDomain.UnhandledException...
Блин, на gotdotnet.ru тоже спрашивал... там считают это поведение VS.Net нормальным....


 
ilya39 ©   (2005-12-22 14:38) [4]


>  [2] DiamondShark ©   (22.12.05 14:34)

А с какой Delphi7 тогда продолжает?


 
Skyle ©   (2005-12-22 14:39) [5]


> там считают это поведение VS.Net нормальным....

Думаю, здесь тоже так считают.


 
ilya39 ©   (2005-12-22 14:42) [6]


>  [5] Skyle ©   (22.12.05 14:39)

Мотивируйте! Почему в одном слачае так, а в другом наооборот. Хотелось бы услышать грамотный ответ.


 
ilya39 ©   (2005-12-22 14:44) [7]

И еще сильно интересно: как поведет себя Delphi 2005?


 
SPeller ©   (2005-12-22 14:47) [8]

По-моему, дельфийское приложение всегда вываливается, если исключение никем не обработано.


 
SPeller ©   (2005-12-22 14:51) [9]

program lab3;

uses
 SysUtils,
 Forms,
 Unit1 in "Unit1.pas" {Form1};

{$R *.res}

begin
 StrToInt("qwe");

 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.


Чудеса, наверное, что здесь программа дальше не идёт? Отсюда вывод - просто Борланд предусмотрительно наставил try .. except/finally. И дело вовсе не в MSVS.


 
ilya39 ©   (2005-12-22 14:51) [10]


>  [8] SPeller ©   (22.12.05 14:47)

Напишите на Delphi код указанный в

> ilya39 ©   (22.12.05 14:12)

допустим, в обработчике кнопки и потестируйте... после сообщения Delphi об ошибке можно будет продолжить выполнение программы, нажав кнопочку Run(это такой зеленый треугольник на tool) и увидев сообщение об ошибке уже в ОС


 
ilya39 ©   (2005-12-22 14:53) [11]


>  [9] SPeller ©   (22.12.05 14:51)

Sorry не понял вас в прошлый раз. Похоже вы правы...


 
DiamondShark ©   (2005-12-22 14:55) [12]


> ilya39 ©   (22.12.05 14:38) [4]
>
> А с какой Delphi7 тогда продолжает?

Известно с какой: с конца блока обработки исключения:


procedure TWinControl.MainWndProc(var Message: TMessage);
begin
 try
   try
     WindowProc(Message);
   finally
     FreeDeviceContexts;
     FreeMemoryContexts;
   end;
 except
   Application.HandleException(Self);
 end;
end;


Вставьте строку кода не в обработчик события формы, или контрола, а, например, сюда:


program Project1;

uses
 SysUtils,
 Forms,
 Unit1 in "Unit1.pas" {Form1};

{$R *.RES}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 StrToInt("qwe");
 Application.Run;
end.


И посмотрите на результат.


 
ilya39 ©   (2005-12-22 14:57) [13]


>  [12] DiamondShark ©   (22.12.05 14:55)


> [9] SPeller ©   (22.12.05 14:51)

Спасибо, объяснили.


 
Agent13 ©   (2005-12-22 14:57) [14]


> Так вот, в Delphi можно продолжить выполнение приложения,
>  а в Visual Studio - почему-то нет! Можно выбрать break
> или continue, но в любом случае потом при нажатии Run приложение
> завершается? Кто мне подскажет: может это где-то настраивается?
>  Сильно мешает!

Ну ничего, что мешает. во всяком случае напоминает о необходимости проставлять try...catch :)



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

Текущий архив: 2006.01.15;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.048 c
5-1120890863
[NightGhost]
2005-07-09 10:34
2006.01.15
Компоненты в стиле WinXP


2-1135332639
oleggar
2005-12-23 13:10
2006.01.15
fakedll


14-1134900234
Piter
2005-12-18 13:03
2006.01.15
Выдержки из логов одной IRC-сети


3-1132220839
Baraban
2005-11-17 12:47
2006.01.15
Делфи и Mysql


10-1110887923
Eleonore
2005-03-15 14:58
2006.01.15
Формулы Excel в Delphi