Как правильно дебажить солюшен?

Программирование Web-приложений и Web-сервисов.

Модератор: Ramzes

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Как правильно дебажить солюшен?

Сообщение Antonariy » 15.12.2009 (Вт) 11:29

VS 2008
Солюшен представляет собой веб-сайт из одной страницы с присоединенным проектом типа Class Library под названием WebServer.WebClass. У сайта есть на него ссылка.

Код страницы:
Код: Выделить всё
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" Debug="true" ValidateRequest="false" %>
<%

    Dim objWC As WebServer.WebClass
    Dim ex As Exception
    try
        objWC= new WebServer.WebClass
        Try
            Dim r As String = objWC.BeginRequest(Response, Request, Server)
            If r <> "" Then Response.Write("<font face = ""Courier NEW"">WebClass BeginRequest Error: " & r & "</font>")
        Catch ex
            Response.Write("<font face = ""Courier NEW"">ASP BeginRequest Error: " & ex.Message & "</font>")
        End Try
    Catch ex
        Response.Write("<font face = ""Courier NEW"">ASP CreateObject Error: " & ex.Message & "</font>")
    end try
%>
Проблема в том, что редактирование кода WebServer в режиме отладки невозможно, выводится такое сообщение: "Changes are not allowed when the debugger has been attached to an already running process or the code being debugged was optimized at build or run time". При этом исходник Default.aspx редактируется нормально. Что делать?
Лучший способ понять что-то самому — объяснить это другому.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Как правильно дебажить солюшен?

Сообщение MIT » 15.12.2009 (Вт) 14:16

Antonariy писал(а):При этом исходник Default.aspx редактируется нормально. Что делать?
Спокойно редактируются файлы страниц, сервисов, web.config, при этом редактирование файлов чисто кода (.vb, .cs) невозможно. Дебаг затруднен, но можно спокойно ставить бряки (если бряк не ставиться или не работает, то помогает ребилд) и менять порядок выполнение кода, для изменения же самого кода нужно останавливать дебаг - так уж оно работает. Как вариант - можно тестить сайт без дебага, спокойно меняя код и билдя его каждый раз (предкомпиляция) после внесения изменений.

Впрочем могу и ошибаться, но другого способа не знаю.

Добавлено: а вообще может и прокатить, если файлы кода лежат в App_code, в этом случае сервер сам занимается предкомпиляцией при внесении изменений в код; по модели компиляции оно так и должно работать.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Как правильно дебажить солюшен?

Сообщение Antonariy » 15.12.2009 (Вт) 16:15

У меня большая система, чтобы добраться до ошибки, нужно выполнить кучу действий. Добрался, понял, что исправить, остановил, исправил. И опять с нуля до той же точки, чтобы проверить. Ппц, пол-дня на этот серфинг уходит. Ведь эта студия и броузер закрывает при остановке, и порт может поменять, даже адресную строку не сохранишь.
Добавлено: а вообще может и прокатить, если файлы кода лежат в App_code, в этом случае сервер сам занимается предкомпиляцией при внесении изменений в код; по модели компиляции оно так и должно работать.
Можно поподробнее? Есть папка WebSite с проектом сайта (с файлами Default.aspx и web.config, папки App_code нет), есть папка ClassLibrary с соответствующим проектом (там тоже нет App_code). Оба проекта объединены в solution, стартовым назначен веб-сайт.

Что можно сделать, чтобы заставить ClassLibrary нормально отлаживаться?
Лучший способ понять что-то самому — объяснить это другому.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Как правильно дебажить солюшен?

Сообщение MIT » 15.12.2009 (Вт) 17:13

Antonariy писал(а):броузер закрывает при остановке, и порт может поменять
Мою Оперу не закрывает. А порт не может поменятся - он генерируется один раз и хранится в файле проекта под именем DevelopmentServerPort.

Если ничего не путаю, то (читал в книжке в умной):
Компиляцией сайта занимается сервер, он компилирует страницы и код. Только один раз при первом запуске сервера. Однако, если файлы кода поменялись (код или страницы), сервер рекомпилирует проект, при этом компилируются страницы (код Code Behind) и исходники, к страницам не относяциеся. При этом код компилируется только тот, который лежит в папке App_Code, расположенной в корне сайта.
Папка эта автоматически не создается, ее нельзя добавить через Солюшн Эксплорер (ПКМ по проекту > Add > Add ASP.NET Folder > ) (что странно), но можно создать вручную:
Изображение
(При предпросмотре добавлено: Упс, не ту папку выделил на картинке... Ну ладно, думаю общая мысль понятна.)
Также есть такая фишка как предкомпиляция - способ развертывания, при котором не копируются файлы исходников. Т.е. можно скомпилировать сайт самому, на сервер же положить в папку bin сборку, скопировать файлы страниц (.ASPX) (и прочие), и все будет работать замечательно, сервер не будет ничего компилировать.

По идее (сам не проверял) при использовании первого варианта не должно быть ограничений на редактирование файлов, ведь сервер сам это распознает и перекомпилирует, хотя с другой стороны перекомпилировать во время дебага сложно :)
Попробуй, вдруг получится...


Пойду почитаю расширенную инфу по модели компиляции, может что интересного узнаю.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Как правильно дебажить солюшен?

Сообщение Antonariy » 16.12.2009 (Ср) 11:59

Попробовал поиграться с App_Code, добился только того, что сайт перестал запускаться :)
Пойдем другим путем.

Заметил, что Default.aspx.vb отлаживается нормально. Возможно ли в его контексте в процедуре Protected Sub Page_Init получить Response, Request и Server чтобы туда же перенести весь код из aspx?
Лучший способ понять что-то самому — объяснить это другому.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Как правильно дебажить солюшен?

Сообщение MIT » 16.12.2009 (Ср) 12:16

Antonariy писал(а):Возможно ли в его контексте в процедуре Protected Sub Page_Init получить Response, Request и Server чтобы туда же перенести весь код из aspx?
Response, Request, Server, Cache и Session доступны из любого метода aspx страницы, IsCallBack, IsCrossPagePostBack и IsPostBack устанавливаются с события PreInit (т.е. можно сказать что доступны всегда), с события ItinComplete можно полноценно работать с ViewState.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Как правильно дебажить солюшен?

Сообщение Antonariy » 16.12.2009 (Ср) 13:05

Последний вопрос: есть ли для вебсайта аналог My.Application.Info.Version?

Upd:
Разобрался с папкой App_Code, для дебага скопировал туда файлы библиотеки и исключил ее из солюшена.
При этом код компилируется только тот, который лежит в папке App_Code, расположенной в корне сайта.
При изменении исходника содержимое App_Code не перекомпилируется без остановки проекта. Я какую-то настройку упустил?
Последний раз редактировалось Antonariy 17.12.2009 (Чт) 14:26, всего редактировалось 1 раз.
Лучший способ понять что-то самому — объяснить это другому.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Как правильно дебажить солюшен?

Сообщение Antonariy » 17.12.2009 (Чт) 14:23

Это две настройки:
1)Website - StartOptions - MSBuild Options - Allow this precompiled site to be updatable (да).
2)Tools - Options - Debugging - General - Require source files to exactly match the original version (нет).

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

Новый год, пора апгрейдов :)
Лучший способ понять что-то самому — объяснить это другому.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Как правильно дебажить солюшен?

Сообщение MIT » 17.12.2009 (Чт) 17:19

Antonariy писал(а):Website - StartOptions - MSBuild Options - Allow this precompiled site to be updatable (да).
Не смог найти где это, но залез в настройки ипоставил галочку:
Изображение
Вроде работает.

Спасибо за идею, что это можно поправить, думаю дышать станет легче :)
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш


Вернуться в ASP.NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 43

    TopList