Прежде чем приступать к изложению основной темы данной статьи вспомним
об одной из главных проблем разработки веб-приложений, с которыми
сталкиваются разработчики ASP. Полагаю каждый веб-разработчик может
вспомнить бесчисленные часы, в течение которых он вместо того, чтобы
заниматься совершенствованием логики своего решения, тратил своё время
на совершенствование пользовательского интерфейса, которое в конечном
итоге как правило сводится к отслеживанию, того чтобы переменные в ASP
коде соответствовали тому, что было получено в объект Request.
Постоянные изменения HTML содержания исходной страницы влекли за собой
бесчисленные изменения кода обработчика.
После нескольких месяцев работы в Notepad или Far разработчика
начинает тошнить от тегов < form >. Следует также обратить внимание, что
в профессиональной среде разработчиков Visual InterDev используется не
так широко, как хотелось бы и веб-разработчики продолжают активно
использовать в разработке веб-приложений Notepad, а в качестве дебаггера
используют веб-браузер, постепенно отлавливая ошибки приложения
приблизительно таким образом: предположим девелопер хочет узнать
состояние переменной X на каком-либо этапе выполнения программы. Он
просто использует функцию < % Response.Write (X)% >, вставив её в
определённый учасок кода, и использует веб-браузер в качестве отладчика,
видя на экране значение переменной. Я называю такой подход: «горячая
отладка» (возможно существует более правильное определение такому
подходу). Надо отменить, что на на практике выясняется, что приложения
отлаженные такмим способом, работают надёжнее, чем отлаженные с
использованием Visual InterDev. Природа этого феномена мне не известна,
полагаю фирма Microsoft занимается его изучением.
Ситуация изменилась в лучшую сторону после появления технологии .NET
и средства визуальной разработки Visual Studio.NET. В отличие от прежних
версий, Visual Studio.NET обладает значительным количеством средств, для
эффективной разработки и отладки веб-приложений, с минимальным
использованием горячей отладки ala < %Response.Write (X)% >. Стоит так
же отметить, что технология .NET сама по себе склоняет пользователя к
тому, чтобы отказаться от использования горячей отладки, т.е. делает её
не целесообразной, однако это предмет для следующих статей.
Сейчас разрабатывается много веб-приложений, с использованием .NET. и
представим себе ситуацию, что вам необходимо отладить проблемное
веб-приложение, которое установлено у хостинг провайдера, и вам жизненно
необходим дебаггер, для того, чтобы отследить ошибку. Вспомним о том,
что дебаггер есть в Visual Studio.NET, которая на машине хостинг
провайдера наверняка не установлена. Как отлаживать приложение в этом
случае? В этой статье я хотел бы затронуть тему, посвященную созданию и
отладке веб-приложения без использования Visual Studio.NET, т.е.
используя .NET Framework SDK и, как это не банально, Notepad. Надо
отдавать отчёт тому, что разработка приложения при таком усложняется,
однако моя цель показать, что у разработчика есть возможность провеcти
полноценную отладку приложения с использованием штатных средств .NET
Framework SDK, который во-первых бесплатный, и его всегда можно свободно
скачать с сайта Microsoft, во-вторых, он не так много весит.
В качестве примера разработаем простейший вариант веб-приложения(рис.
1), в котором по нажатию на кнопку “Calculate”, программа считывала
данные из двух элементов TextBox, вычисляла их сумму, а затем выводила
результат. Затем отладим это приложение с использованием Microsoft CLR
Debugger. Для примера создадим виртуальную директорию /test, в ней
создадим директорию bin/ (в которой будем сохранять сборки) и напишем в
Notepad файлы: default.aspx, default.aspx.cs и конечно же Web.config. Я
не буду в своём примере обращать внимание на обработку введённых
пользователем данных, хотя рекомендую ВСЕГДА не доверять введённым
пользователем данным и проверять их. Почему не надо доверять данным,
введённым пользователем вы можете прочитать в сентябрьском номере MSDN
Magazine:
http://msdn.microsoft.com/msdnmag/issues/02/09/SecurityTips/default.aspx.
1. Создадим файл default.aspx:
<%@ Page language="c#" Codebehind="default.aspx.cs"
AutoEventWireup="false"
Inherits="DefaultForm" %>
<HTML>
<HEAD>
</HEAD>
<body>
<form id="cardetails" method="post"
runat="server">
X=<asp:TextBox id="txtboxX"
runat="server"></asp:TextBox><BR>
Y=<asp:TextBox id="txtboxY"
runat="server"></asp:TextBox><BR>
<BR>
Sum X+Y=<asp:Label
id="lblResult" runat="server">?
</asp:Label><BR>
<BR>
<asp:Button id="btnCalc"
runat="server"
Text="Calculate"></asp:Button>
</form>
</body>
</html>
Следует обратить внимание на первую строку и быть внимательнее к
атрибуту Inherits.
2. Далее: default.aspx.cs
using System;
public class DefaultForm: System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label lblResult;
protected System.Web.UI.WebControls.TextBox txtboxX;
protected System.Web.UI.WebControls.TextBox txtboxY;
protected System.Web.UI.WebControls.Button btnCalc;
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.btnCalc.Click += new System.EventHandler(this.btnCalc_Click);
}
private void btnCalc_Click(object sender, System.EventArgs e)
{
double x=0;
double y=0;
try
{
x=System.Double.Parse(txtboxX.Text);
y=System.Double.Parse(txtboxY.Text);
}
catch (Exception ex)
{
string errstr=ex.StackTrace;
// Обработка
};
double Result=x+y;
lblResult.Text=Result.ToString();
}
}
3. Web.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<compilation
defaultLanguage="c#"
debug="true"
/>
</system.web>
</configuration>
Следует обратить внимание на атрибут debug. Если мы собираемся
проводить отладку приложения, то его необходимо установить в true.
Теперь соберём наши сборки. Для этого нужно перейти в директорию с
файлами .aspx,.cs. Собирать сборку нужно в режиме подготовки к отладке,
т.е. необходимо включить режим /debug+ компилятора C# csc.exe. Таким
образом строка запуска будет выглядеть таким образом: csc
/target:library default.aspx.cs /debug+ (убедитесь, что путь к csc.exe
указан в переменной %PATH%) После удачной отработки, в директории будут
созданы два файла default.aspx.dll – собственно сама сборка и
default.aspx.pdb (PDB - program database), файл, который содержит
отладочную информацию. Эти файлы нужно поместить в директорию bin/
виртуальной директории /test. Затем запускаем Internet Explorer и
открываем первую страницу веб-приложения.
Рис. 1
Отладка веб-приложения.
Для отладки веб-приложения нужно запустить программу Microsoft CLR
Debugger – DbgCLR.exe, эта программа находится в директории
FrameWorkSDK\GuiDebug\ DbgCLR.exe.
Теперь открываем файл, который собираемся отлаживать, в нашем случае
default.asp.cs.
Рис. 2
Далее запускаем Tools\DebugProcesses в меню дебаггера.
Рис. 3
Выбираем из списка процесс asnet_wp.exe (ASP.NET Working Process) и
нажимаем Attach.
Рис. 4
Закрываем окно Processes и устанавливаем Breakpoint на нужную строку
кода. Мне, например, интереснее всего остановится перед строкой
вычисления результата.
Далее возвращаемся в Internet Explorer и нажимаем кнопку Calculate.
Рис. 5
Происходит останов программы на заданной Breakpoint, и всплывет окно
дебаггера (рис.5)
Далее разработчик может использовать привычные инструменты дебаггера:
Add Watch, чтобы посмотреть значения интересующих его переменных, и
другие возможности.
Таким образом, я показал возможность отладки веб-приложений без
использования Visual Studio.NET, что позволяет утверждать, что .NET
Framework SDK обладает достаточным количеством средств для работы
профессионального разработчика, который по финансовым, амбициозным или
по каким-либо другим причинам решил отказаться от использования Visual
Studio.NET.