Номер статьи: KB000003
Связанные блоки:
В системной сборке System имеется класс Debug, предназначенный для вывода отладочной информации при выполнении модулей или форм. Данный класс имеет несколько статических методов, решающих разные задачи:
Write, WriteLine. Предназначены для вывода указанной строки. По умолчанию все отладочные сообщения выводятся в панели «Окно консоли» среды разработки.
WriteIf, WriteLineIf. Предназначены для вывода указанной строки только при выполнении заданного условия.
Indent, Unindent. Предназначены для вывода указанной строки с отступом по отношению к предыдущим, тем самым выделяя их.
Метод Assert позволяет вставить в код условие для проверки внутреннего состояния исполняемого кода. Если код не соответствует заданному условию, то выводится сообщение об этом. Часто разработчики пишут код процедур или функций исходя из некоторых предположений о значениях их параметров. Данный метод позволяет включить в код проверку этих предположений и уже на этапе тестирования системы выявить проблемы, если они реально существуют.
Метод Fail позволяет безусловно сообщить о какой-то серьезной проблеме, возникшей при выполнении кода.
Разработчики часто используют функцию IWinApplicationClass.InformationBox для вывода отладочных сообщений. Её использование может привести к неработоспособности прикладной системы в веб-версии. Рекомендуется учитывать и этот фактор при разработке прикладных систем.
Для вывода отладочных сообщений при работе .NET-сборки среда разработки была доработана таким образом, чтобы можно было использовать свойства и методы класса Debug из пространства имен System.Diagnostics (сборка System.dll). Свойства и методы класса Debug из Fore-сборки System в Fore.NET не поддерживается.
Назначение всех свойств и методов указанных классов практически аналогичное, отличие имеют методы Assert и Fail: данные методы класса System.Diagnostics.Debug кроме заданных сообщений также выводят информацию о стеке вызова). Описание всех перегруженных методов класса System.Diagnostics.Debug доступно в MSDN.
Sub UserProc;
Var
Value: Double;
Begin
Debug.WriteLine("Hello, world!");
Value := Math.Rand;
Debug.Write("Random value: "); Debug.WriteLine(Value);
Debug.WriteLineIf(Value > 0.5, "Random value is greater than 0.5");
Debug.WriteLine("Indented random outputs");
Debug.Indent;
Try
Debug.WriteLine(Math.Rand);
Debug.WriteLine(Math.RandBetween(0, 100));
Finally
Debug.Unindent;
End Try;
Debug.Assert(Math.Rand > 0.5);
Debug.Fail("There is an serious failure in software");
End Sub UserProc;
В окно консоли будет выведено:
Выполнение модуля начато
Hello, world!
Random value: 0,175467571750159
Indented random outputs
0,64320357647799
11,6849231109221
Assert failed
There is an serious failure in software
Выполнение модуля завершено
Для выполнения примера подключите .NET-сборки System и mscorlib. Пример, аналогичный примеру на Fore, будет выглядеть следующим образом:
Imports System;
Imports System.Diagnostics;
Public Shared Sub Main(Params: StartParams);
Var
Rnd: Random = New Random();
Value: Double;
Begin
Debug.WriteLine("Hello, world!");
Value := Rnd.NextDouble();
Debug.Write("Random value: "); Debug.WriteLine(Value);
Debug.WriteLineIf(Value > 0.5, "Random value is greater than 0.5");
Debug.WriteLine("Indented random outputs");
Debug.Indent();
Try
Debug.WriteLine(Rnd.NextDouble());
Debug.WriteLine(Rnd.Next(0, 100));
Finally
Debug.Unindent();
End Try;
Debug.Assert(Rnd.NextDouble() > 0.5, "Значение меньше 0.5");
Debug.Fail("There is an serious failure in software");
End Sub;
В окно консоли будет выведено:
Hello, world!
Random value: 0,52850199561962
Random value is greater than 0.5
Indented random outputs
0,832817622382575
95
---- DEBUG ASSERTION FAILED ----
---- Assert Short Message ----
Значение меньше 0.5
---- Assert Long Message ----
...Далее идет стек вызова...
---- DEBUG ASSERTION FAILED ----
---- Assert Short Message ----
There is an serious failure in software
---- Assert Long Message ----
...Далее идет стек вызова...
См. также: