к оглавлению   к 4GL - визуальному программированию

Отладка приложений

Встретив синтаксическую ошибку в Вашем коде, компилятор Visual J++ сообщает о ней, указывая, что приложение не удалось обновить. Список ошибок выводится в окне Task List среды программирования Visual J+ + .

Однако синтаксическими ошибками дело, как правило, не ограничивается: в коде часто встречаются логические ошибки, например бесконечные циклы. Справиться с ними поможет отладчик Visual J+ + . О применении встроенного отладчика для отладки проектов Visual J+ + см. раздел «Базовые процедуры отладки» далее в этой главе. Там Вы узнаете, как устанавливать точки прерывания, пошагово выполнять код, наблюдать за значениями переменных и многое другое. В состав электронной документации включены примеры, которые помогут освоить методику отладки проектов различных типов. Как воспроизвести эти примеры, описано в следующих разделах:

Процесс отладки

Отладчик Visual J++ поддерживает большинство стандартных функций отладки исходного кода, включая точки прерывания (обычные и условные), контрольные выражения, управление потоками и обработку исключений. Кроме того, Вы можете пошагово выполнять код (по одному оператору или методу), наблюдая за значениями переменных и свойств Вряд ли можно дать какие-то общие рекомендации по отладке приложений или сформулировать один подход на все случаи жизни. В принципе, отладка просто помогает понять, как ведет себя приложение в процессе выполнения, а ее средства позволяют сделать «моментальный снимок» текущего состояния приложения, в том числе:

Базовые процедуры отладки

Отладив несколько приложений, Вы заметите, что некоторые процедуры отладки применимы практически ко всем программам.

Ввод аргументов командной строки

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

В следующей процедуре поясняется, как использовать параметры раздела Custom на вкладке Launch диалогового окна свойств проекта. Для доступа к диалоговому окну свойств открытого проекта выберите соответствующую команду из меню Project.

Чтобы ввести аргументы командной строки:

  1. В окне Project Explorer дважды щелкните JAVA-файл — он будет открыт в редакторе Text.
  2. Выберите из меню Project команду ИмяПроекта Properties. Появится диалоговое окно свойств проекта.
  3. На вкладке Launch щелкните переключатель Custom — станут доступными поля Program и Arguments.
  4. В поле Arguments введите информацию, которую нужно передать Вашей программе. Например, если программа принимает дату в формате ДД ММ ГГ, то для передачи даты «10 июля 1997 года» введите 10 7 1997.

Примечание В поле Arguments могут присутствовать и параметры, предлагаемые по умолчанию. Если Вы по какой-то причине решите изменить их, сделайте сначала это и только потом вводите дату.

Теперь Вы готовы к отладке приложения. Один из способов начать ее — установить точки прерывания, а потом запустить отладчик.

Панель инструментов Debug

Эта панель инструментов открывает доступ к часто используемым командам и окнам отладчика.

Чтобы вывести на экран панель инструментов Debug:

Установка точек прерывания

Точка прерывания — место в коде, где выполнение приостанавливается, что позволяет наблюдать за поведением программы, значениями ее переменных и в некоторых случаях — регистров. Кроме того, в этот момент можно внести изменения в код, а затем продолжить (или завершить) его выполнение. В этом разделе поясняется, как устанавливать точки прерывания.

Установка точек прерывания до запуска отладчика

После создания и сборки проекта Visual J++ в его коде можно расставить точки прерывания. Если поведение программы свидетельствует о наличии ошибки, точки прерывания позволяют временно остановить ее выполнение там, где, как Вы подозреваете, кроется источник проблемы.

Чтобы установить точку прерывания и запустить отладчик:

  1. Открыв исходный файл в редакторе, поместите курсор на нужный исполняемый оператор Вашего приложения, апплета или компонента.
  2. Щелкнув правой кнопкой мыши, выберите из контекстного меню команду Insert Breakpoint.

    На левом поле окна редактора появится красный кружочек, обозначающий, что в данном операторе находится точка прерывания.

  3. Выберите из меню Debug команду Start или нажмите клавишу F5. Ваша программа запускается и приостанавливается перед строкой, на которой Вы поставили точку прерывания. Желтая стрелка на левом поле указывает оператор, который будет выполнен следующим.

Когда программа находится в режиме прерывания, Вы можете:

Чтобы возобновить выполнение программы под управлением отладчика:

Подробнее о завершении сеанса отладки см. раздел «Ending a Debugging Session» в электронной документации Visual Studio.

Установка точек прерывания из диалогового окна Breakpoints

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

Анализ информации в отладочных окнах

Здесь описывается, для чего предназначено каждое отладочное окно и как им пользоваться.

Окно Auto

В этом окне отображаются значения всех переменных в области видимости выполняемых на данный момент методов. В отличие от окна Locals, где показываются переменные для одного потока, окно Auto сообщает о переменных для всех потоков. Это окно, в частности, позволяет отслеживать изменения в значениях переменных, вызванные выполнением кода в другом потоке. Переменная доступна (и Вы можете наблюдать за ее значениями), пока не выйдет за область видимости. После этого она удаляется из окна Auto.

Содержимое окна Auto обновляется, только когда программа приостановлена — например, Вы добавляете новую контрольную переменную, изменяете значение какой-либо переменной-члена или переключаете формат отображения значений между десятичным и шестнадцатерич-ным (через контекстное меню). Значения переменных, изменившихся с момента последнего прерывания программы, выделяются красным цветом.

Чтобы открыть окно Auto:

Чтобы скопировать переменную из окна Auto в другое окно:

Чтобы изменить значение переменной:

Чтобы вывести или скрыть переменные и элементы массива класса:

Подробнее о том, как работать с этим окном и просматривать переменные и элементы массива класса, см. раздел «Комбинации клавиш для работы с окнами Auto, Locals и Watch» далее в этой главе. Подробнее об окне Auto см. раздел «Viewing Variables in the Auto Window» в электронной документации Visual Studio.

Окно Locals

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

Для каждой переменной класса в окне Locals предусмотрены поля Name, Value и Туре. Значение переменной появляется в этом окне сразу после ее объявления в программе. Если переменная находится вне области видимости, когда Вы просматриваете окно Locals, в поле Value выводится соответствующее сообщение. Это значит, что просмотр значения данной переменной невозможен, пока Вы не выполните еще какую-то часть кода. Содержимое окна Locals обновляется, только когда программа приостановлена. Значения переменных, изменившихся с момента последнего прерывания программы, выделяются красным цветом.

Чтобы открыть окно Locals:

Чтобы сменить класс, информация о котором отображается в окне Locals:

Примечание Определив в программе более одного класса, Вы, вероятно, захотите понаблюдать за значениями переменных во всех этих классах. В окне Locals всегда показываются переменные-члены только того класса, в котором присутствует стартовая точка Вашей программы — метод main или init. Если при пошаговом выполнении программы или остановке ее на точке прерывания Вы попали в другой класс, можете просмотреть значения его переменных-членов, выбрав имя этого класса из списка в верхней части окна Locals.

Чтобы скопировать переменную из окна Locals в другое окно:

Чтобы изменить значение переменной:

Чтобы вывести или скрыть переменные и элементы массива класса:

Подробнее о том, как работать с этим окном и просматривать переменные и элементы массива класса, см. раздел «Комбинации клавиш для работы с окнами Auto, Locals и Watch» далее в этой главе. Подробнее об окне Locals см. раздел «Viewing Local Variables in the Locals Window» в электронной документации Visual Studio.

Окно Watch

Это окно позволяет наблюдать за значениями переменных, свойств и выражений при выполнении программы. Немедленно выявить источник проблем «с точностью» до конкретного оператора удается нечасто. И здесь помогает окно Watch, где можно проверить, как изменяются значения переменных и выражений при выполнении кода. Среда программирования автоматически отслеживает указанные Вами контрольные выражения. Когда программа приостанавливается, они появляются в окне Watch и Вы можете увидеть их значения.

Чтобы открыть окно Watch:

Чтобы добавить контрольное выражение на этапе разработки или в режиме прерывания:

Чтобы изменить значение переменной:

Чтобы вывести или скрыть переменные и элементы массива класса:

Подробнее о том, как работать с этим окном и просматривать переменные и элементы массива класса, см. раздел «Комбинации клавиш для работы с окнами Auto, Locals и Watch» далее в этой главе. Подробнее об окне Watch см. раздел «Inspecting Variables and Properties with the Watch Window» в электронной документации Visual Studio.

Комбинации клавиш для работы с окнами Auto, Locals и Watch

Работая с окнами Auto, Locals и Watch, можно использовать следующие комбинации клавиш.

Действие

Клавиша

Развертывание списка

Свертывание списка

Развертывание/свертывание списка

Перемещение вверх по элементам списка

Перемещение вниз по элементам списка

Перемещение по спискам вверх

Перемещение по спискам вниз

Стрелка вправо

Стрелка влево

Enter

Стрелка вверх

Стрелка вниз

Стрелка влево

Стрелка вправо

Примечание Чтобы расширить поле, достаточно перетащить границу его заголовка вправо, а чтобы сузить — влево.

 

Окно Immediate

Это окно позволяет просматривать и изменять значения. Здесь можно вычислить любое выражение или переменную, увидеть, какое значение возвращает объект, или выяснить, к какому результату приводят набираемые Вами команды (они должны быть на том же языке, что и выполняемый код).

Когда программа приостановлена, можно активизировать окно Immediate для анализа текущих значений. Область видимости переменных и объектов в окне Immediate определяется формой или классом, активным на данный момент.

Чтобы открыть окно Immediate:

Чтобы добавить выражение или переменную в окно Immediate:

Чтобы оценить значение выражения или переменной в окне Immediate:

  1. В окне Immediate поместите курсор на выражение или переменную, чье значение Вы хотите оценить.

Примечание Для просмотра переменных или выражений, в состав которых входит код сценария, ставьте перед их именами вопросительный знак.

  1. Нажмите клавишу Enter.

Если Вы выбрали переменную, окно Immediate сообщит ее текущее значение, а если Вы выбрали выражение — результат его оценки.

Чтобы повторно выполнить уже введенный оператор:

  1. Переместите курсор ввода к нужному оператору.
  2. Если хотите, отредактируйте этот оператор.
  3. Нажмите клавишу Enter. Чтобы переместить курсор ввода в окне Immediate:

Совет Не нажимайте клавишу Enter, если курсор находится не на том операторе, который Вы хотите выполнить.

Подробнее об окне Immediate см. раздел «Executing Commands and Evaluating Expressions in the Immediate Window» в электронной документации Visual Studio.

Окно Threads

При отладке многопоточных приложений окно Threads позволяет сменить выполняемый в данный момент поток и просмотреть список потоков любого процесса, связанного с Вашим приложением. При смене потока в этом окне соответственно изменяется содержимое остальных отладочных окон. Подробнее на эту тему см. разделы «Threads Window» и «Controlling Threads» в электронной документации Visual Studio.

Открытие отладочного окна Threads

Чтобы открыть окно Threads:

Наблюдение за потоком в окне Threads

Здесь используется приложение-пример, метод main которого создает два потока и направляет вывод в консольное окно JView. Исходный код этого приложения см. в разделе «Пример многопоточного приложения» далее в этой главе. Если Вы хотите воспроизвести операции, рассматриваемые в данном разделе, создайте проект этого приложения прямо сейчас.

Чтобы наблюдать за поведением потока:

  1. Установите точку прерывания в классе Coffee на операторе:

    System.out.println("I Like Coffee" + " " + i);

  2. Установите точку прерывания в классе Tea на операторе:

    System.out.println("I Like Tea" + " " + i);

  3. Поместите курсор ввода в код метода main класса Classl на оператор:

    Coffee m_Coffee = new Coffee(); //создается объект Coffee

  4. Щелкнув правой кнопкой мыши, выберите из контекстного меню команду Run To Cursor.
  5. Когда программа приостановится, откройте окно Threads. Обратите внимание, что в данный момент выполняется лишь поток main.
  6. Нажмите клавишу F5 — программа будет выполнена до точки прерывания в классе Coffee.

    В окне Threads появится дополнительная информация об именах, текущем участке кода и состоянии трех потоков Вашего приложения: main, Thread-0 и Thread-1. Желтая стрелка указывает, какой поток выполняется в данный момент, — Thread-О метода Coffee.run. Заметьте, что поток main сейчас не выполняется, так как он передал управление потокам классов Coffee и Tea.

Примечание Хотя здесь предполагается, что первым выполняется поток класса Coffee, это не всегда так. Операционная система сама определяет порядок обработки потоков в приложении -кроме тех случаев, когда в коде присутствуют операторы, задающие условия создания и запуска нового потока.

  1. Нажмите клавишу F11 — выполняется текущий оператор.
  2. Переключитесь в консольное окно JView, где появится текст: I Like Coffee 0
  3. Нажмите клавишу F5 — программа выполняется до точки прерывания в классе Tea.
  4. Нажмите клавишу F11 — выполняется текущий оператор и в консольном окне JView появляется текст:

    I Like Tea 0

  5. Продолжайте нажимать клавиши F5 и F11, пока в консольном окне JView не будет выведено одно из следующих сообщений:

    I Like Coffee 9

    — или —

    I Like Tea 9

После уничтожения потока исчезает и информация о нем (в окне Threads).

Наблюдая за каждым из потоков приложения, Вы сможете выявить тот, который ведет себя не так, как ожидалось. Как изолировать поток, приостановив остальные потоки, см. следующий раздел.

Приостановка и возобновление потоков из окна Threads

Здесь используется приложение-пример, метод main которого создаст два потока и направляет вывод в консольное окно JView. Исходный код этого приложения см. в разделе «Пример многопоточного приложения» далее в этой главе. Если Вы хотите воспроизвести операции, рассматриваемые в данном разделе, создайте проект этого приложения прямо сейчас.

Чтобы приостановить поток:

  1. Поставьте точки прерывания в операторах, выполняемых сразу после создания потоков в Вашем приложении. В данном примере точки прерывания установлены в классе Coffee на операторе:

    System.out.println("I Like Coffee" + " " + i);

    в классе Tea на операторе:

    System.out.println("I Like Tea" + " " + i);

  2. Выберите из меню Debug команду Start (или нажмите клавишу F5) для запуска приложения под управлением отладчика.
  3. Когда программа приостановится, откройте окно Threads.

Примечание Операционная система сама определяет порядок обработки потоков в приложении — кроме тех случаев, когда в коде присутствуют операторы, задающие условия создания и запуска нового потока.

  1. В окне Threads выделите подсветкой один из потоков, в данном случае — поток Thread-1 метода Tea.run.
  2. Щелкнув правой кнопкой мыши, выберите из контекстного меню команду Suspend.

    Обратите внимание: значение счетчика Suspension, Count потока Thread-1 изменилось с 0 на 1.

  3. Оставив хотя бы один поток приостановленным, возобновите программу нажатием клавиши F5 или F11.

Если Вы используете приложение-пример, в консольное окно JView направляется вывод всех потоков, кроме приостановленного. При отладке многопоточного приложения в какой-то момент может понадобиться возобновить приостановленный поток. Делается это так, как описано в следующей процедуре.

Примечание Эта процедура требует предварительно:

Чтобы возобновить приостановленный поток:

  1. В окне Threads выделите подсветкой один из потоков, в данном случае — поток Thread-1 метода Tea.run.
  2. Щелкнув правой кнопкой мыши, выберите из контекстного меню команду Resume.

Обратите внимание: значение счетчика Suspension Count потока Thread-1 изменилось с 1 на 0.

Окно Call Stack

В окне Call Stack отображается список активных процедур или кадров стека для потока, выполняемого в данный момент. В этом контексте активными считаются незавершенные процедуры.

Чтобы открыть окно Call Stack:

Чтобы сменить активный поток из окна Call Stack:

О специфических элементах этого окна см. раздел «Viewing the Call Stack» в электронной документации Visual Studio.

Окно Running Documents

В окне Running Documents показывается список документов, загруженных на данный момент. Например, если в Вашем проекте имеется набор HTML-фреймов, в окне Running Documents отображается список страниц, уже загруженных браузером.

Чтобы открыть окно Running Documents:

Щелкните кнопку Running Documents на панели инструментов Debug.

Чтобы открыть документ из окна Running Documents:

Пошаговое выполнение кода

Приложение-пример, используемое в этой процедуре, преобразует вводимую в командной строке календарную дату в юлианскую. Оно собрано по процедуре, описанной в разделе «Создание консольного приложения» главы 1 «Создание проектов». Если Вы хотите воспроизвести данный пример, создайте проект консольного приложения прямо сейчас.

Сценарий этой процедуры таков: Вы вводите исходную дату, останавливаете программу в точке прерывания и — с помощью отладочных окон — просматриваете значения некоторых переменных своей программы. К этому моменту Вы уже представляете, где кроется источник проблемы, но хотите пошагово выполнить ряд операторов, чтобы получше разобраться в происходящем. Как это сделать, поясняет следующая процедура.

Чтобы пошагово выполнять код в режиме прерывания:

  1. Поместите курсор на левое поле, напротив строки, с которой Вы хотите начать пошаговое выполнение.
  2. Если Вы следуете примеру отладки консольного приложения, поместите курсор на левое поле напротив оператора:

    for(int nCount=1; nCount < m_nMonth; nCount++)

  3. Щелкните поле. На нем появится красный кружочек, обозначающий установленную точку прерывания.
  4. Нажмите клавишу F5 — отладчик запустит приложение и остановится на только что введенной точке прерывания.

    Желтая стрелка на левом поле указывает оператор, который будет выполнен следующим.

  5. Теперь выполняйте программу пошагово, нажимая Клавишу F11. Попутно обращайте внимание на то, какой оператор выполняется в данный момент и что выводится в открытых отладочных окнах. Значения изменившихся переменных классов в отладочных окнах выделяются красным цветом. Если Вы следуете сценарию отладки консольного приложения, продолжайте пошаговое выполнение программы, пока в отладочных окнах не будут выделены красным цветом значения переменных m_nDayOfYear и nCount.

Подробнее о пошаговом выполнении программы в отладчике см. раздел «Stepping Through Code to Trace Execution» в электронной документации Visual Studio.

Чтобы завершить сеанс отладки:

Отладка WFC-приложения

В этом разделе Вы познакомитесь с принципами отладки приложений, созданных на базе Windows Foundation Classes for Java (WFC).

Примечание В следующем сценарии используется приложение, собранное в разделе «Создание Windows-приложения с применением WFC» главы 1 «Создание проектов». Если Вы хотите воспроизвести предлагаемый сценарий, создайте такое приложение прямо сейчас.

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

Введя календарную дату для преобразования в юлианскую, запустите сеанс отладки (см. раздел «Установка точек прерывания до запуска отладчика» ранее в этой главе).

Достигнув точки прерывания, программа приостановится — исследуйте значения переменных классов в окнах Auto, Locals, Watch и Immediate. Это поможет понять, что происходило в программе до момента ее прерывания.

Изучив, текущее состояние программы, можете добавить другую точку прерывания и продолжить пошаговое выполнение кода. Сценарий отладки WFC-приложения на этом закончен. Подробнее о применении отладочных средств см. раздел «Базовые процедуры отладки» ранее в этой главе.

Отладка консольного приложения

В этом разделе Вы познакомитесь с отладкой консольных Java-приложений.

Примечание В следующем сценарии используется приложение, собранное в разделе «Создание консольного приложения» главы 1 «Создание проектов». Если Вы хотите воспроизвести предлагаемый сценарий, создайте такое приложение прямо сейчас.

Приложение в данном сценарии преобразует календарную дату в юлианскую. Вы вводите дату, ставите точку прерывания и приступаете к отладке, наблюдая за значениями переменных классов в отладочных окнах. Хотя здесь используется код, преобразующий даты, Вы можете проделать все операции с кодом своей программы. Перед запуском этого приложения надо сначала передать ему из командной строки календарную дату, преобразуемую в юлианскую. Как ввести аргументы командной строки с вкладки Launch диалогового окна свойств проекта, см. раздел «Ввод аргументов командной строки» ранее в этой главе. Введя аргументы, откройте сеанс отладки (см. раздел «Установка точек прерывания до запуска отладчика» ранее в этой главе). Достигнув точки прерывания, программа приостановится — исследуйте значения переменных классов в окнах Auto, Locals, Watch и Immediate. Это поможет понять, что происходило в программе до момента ее прерывания.

Изучив текущее состояние программы, можете добавить другую точку прерывания и продолжить пошаговое выполнение кода. Сценарий отладки консольного приложения на этом закончен. Подробнее о применении отладочных средств см. раздел «Базовые процедуры отладки» ранее в этой главе.

Отладка многопоточного приложения

Процесс — это виртуальное адресное пространство, код, данные и системные ресурсы приложения, а поток — код, последовательно выполняемый в процессе. Процессор обрабатывает именно потоки, а не процессы, и поэтому любое 32-разрядное приложение состоит минимум из одного процесса и одного потока. До того как появилось понятие «мно-гопоточность», приложения состояли из единственного потока. Если Вы заметили, что Ваше многопоточное приложение или компонент работает некорректно, то, чтобы выявить источник проблем, Вам, возможно, понадобится отладить код, выполняемый в конкретном потоке. Следующие процедуры описывают, как отлаживать многопоточные приложения, используя окно Threads в сочетании с другими отладочными окнами и средствами.

Если у Вас нет многопоточного приложения, но Вы все же хотите воспроизвести предлагаемые процедуры отладки, создайте сначала приложение, представленное в следующем разделе.

Пример многопоточного приложения

Здесь создается консольное приложение, порождающее два потока. Программа состоит из трех классов: Classl, Coffee и Tea. Classl содержит метод main и код, запускающий два потока для выполнения кода классов Coffee и Tea.

Чтобы создать многопоточное консольное приложение:

  1. Выберите из меню File команду New Project — откроется одноименное диалоговое окно.
  2. Раскройте сначала папку Visual J+ + Projects, затем — Applications.
  3. Щелкните значок Console Application.
  4. В поле Name введите уникальное имя Вашего проекта.
  5. В поле Location введите путь к каталогу, в котором Вы хотите сохранить проект, либо щелкните кнопку Browse и укажите этот каталог.
  6. Щелкните кнопку Open. В окне Project Explorer появится свернутый узел Вашего проекта.
  7. Разверните узел проекта в окне Project Explorer и дважды щелкните файл Class 1.Java — он будет загружен в текстовый редактор.

Чтобы добавить в файл Class1.java классы Coffee и Tea:

  1. В конце файла после фигурной скобки класса Classl введите код, показанный в следующем разделе.
  2. Между фигурными скобками метода main класса Classl наберите код:

    Coffee m_Coffee = "new Coffee(); // создается объект

    Coffee m_Coffee.start(); // создается поток для объекта Coffee

    new Tea().start(); // создается объект Tea и его поток

Код классов Coffee и Tea

Приведенный ниже фрагмент кода собственно и создает многопоточный процесс. Определенные здесь классы Coffee и Tea расширяют класс Thread, что позволяет выполнять их в отдельных потоках.

class Coffee extends Thread {

public void run() {

for(int i = 0; i < 10; i++) {

System.out.println("I Like Coffee" + " " + i); yield(); } } }

class Tea extends Thread {

public void run()

{

for(int i = 0; i < 10; i++)

{

System.out.println("I Like Tea" + " " + i); yield(); } } }

Отладка многопроцессного приложения

Как уже говорилось, процесс — это виртуальное адресное пространство, код, данные и системные ресурсы приложения, а поток — код, последовательно выполняемый в процессе. Процессор обрабатывает именно потоки, а не процессы, и поэтому любое 32-разрядное приложение состоит минимум из одного процесса и одного потока. До того как появилось понятие «многопоточность», приложения состояли из единственного потока. Процессы взаимодействуют между собой посредством сообщений, передавая информацию друг другу по механизму RFC (Remote Procedure Call). При этом безразлично, из какого процесса приходит вызов — выполняемого на удаленной или на той же машине. При отладке приложения, требующего для выполнения нескольких процессов, вероятно, придется наблюдать за поведением всех процессов. Следующая процедура поясняет, как выбирать процесс при отладке приложения.

Чтобы выбрать процесс из окна Threads:

  1. Откройте окно Threads.
  2. Из списка в верхней части окна Threads выберите процесс, за поведением которого Вы хотите понаблюдать.

Выбрав нужный процесс, следуйте инструкциям из раздела «Базовые процедуры отладки»; при этом Вы можете:

Отладка СОМ-объекта

СОМ-сервер — это DLL- или ЕХЕ-файл, реализующий один или несколько классов, которые в свою очередь реализуют один или несколько интерфейсов. СОМ-интерфейс представляет собой группу семантически связанных функций, обеспечивающих доступ к определенной функциональности объекта.

Отладка СОМ-сервера отличается от отладки исполняемого файла или апплета главным образом потому, что СОМ-сервер не предназначен для автономного выполнения — он предоставляет сервис клиентам, каковыми могут быть исполняемые файлы, ASP (Active Server Pages) или другие DLL.

Поэтому отладка СОМ-сервера начинается, как правило, с загрузки его проекта в среду Visual J++, которую затем конфигурируют для запуска своего отладочндго клиента. Потом расставляют точки прерывания в коде объекта, чтобы после запуска отладочного клиента приостановить код объекта в заданном месте. Прервав выполнение кода своего СОМ-сервера, действуйте так же, как и при отладке обычного приложения или апплета.

Конкретный подход к отладке сервера определяется в основном двумя факторами: типом отладочного клиента, обращающегося к серверу, и средой, на которую рассчитан сервер.

Здесь поясняются три подхода к отладке СОМ-сервера — различие между ними заключается в типах применяемых отладочных клиентов.

Использование ASP в качестве отладочного клиента

Прежде чем приступить к отладке серверного компонента:

Подготовка среды для отладки серверного Java-компонента

Чтобы подготовить среду для отладки серверного Java-компонента:

  1. Выберите из меню Tools команду Options, а в одноименном диалоговом окне узел Debugger. На экране появится страница свойств отладчика.
  2. В разделах Java и Script страницы свойств установите флажки Attach to programs running on this machine.
  3. Перезагрузите компьютер, чтобы изменения вступили в силу.
  4. Запустите Internet Explorer и откройте в нем ASP-страницу своего проекта с Web-сервера, на котором Вы установили отлаживаемый серверный компонент.

В окне браузера появится содержимое Вашей ASP-страницы. Сконфигурировав IIS и среду Visual J+ + , Вы готовы к отладке серверного Java-компонента.

Запуск сеанса отладки серверного Java-компонента

Чтобы отладить серверный Java-компонент:

  1. Запустите Visual J+ + .
  2. Выберите из меню File команду Open Project.
  3. На вкладке Existing диалогового окна Open Project выберите проект серверного компонента.
  4. В окне Project Explorer разверните узел своего проекта и дважды щелкните JAVA-файл компонента — он откроется в редакторе Text.
  5. Выберите из меню Debug команду Processes — появится одноименное диалоговое окно.
  6. В разделе Processes этого диалогового окна выберите строку Microsoft Active Server Pages.
  7. Щелкните кнопку Attach — будут запущены Ваш проект и отладчик.
  8. В окне текстового редактора поставьте точку прерывания в код какого-нибудь открытого метода класса Вашего Компонента.
  9. В коде ASP-страницы, показываемой в окне Internet Explorer, установите точку прерывания за той командой сценария, которая вызывает Ваш компонент.
  10. В окне Internet Explorer щелкните кнопку Refresh.

Код сценария вызовет Ваш компонент, выполнение которого приостановится в заданной Вами точке прерывания.

Теперь среда программирования и Ваш проект готовы к отладке компонента обычными средствами.

Применение исполняемого файла в качестве отладочного клиента

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

Чтобы сконфигурировать исполняемый клиентский файл:

  1. Выберите из меню Project команду ИмяПроекта Properties.
  2. Перейдите на вкладку Launch диалогового окна свойств проекта и щелкните переключатель Custom.
  3. В поле Program введите путь к исполняемому файлу, который будет вызывать Ваш компонент.
  4. В поле Arguments введите аргументы командной строки, передаваемые программе, указанной в поле Program.
  5. Щелкните кнопку ОК.
  6. В классе своего компонента поместите курсор в ту строку, где Вы хотите установить точку прерывания.
  7. Для запуска клиентской программы выберите из меню Debug команду Start.

Когда отладчик Visual J+ + приостановит выполнение кода компонента в заданной точке прерывания, Вы сможете воспользоваться командами Step Over, Step Into и Step Out меню Debug.

Использование Microsoft Transaction Server (MTS)

Если разработанный Вами компонент должен поддерживать MTS-тран-закции, для его отладки понадобится как MTS, так и исполняемый файл.

Чтобы сконфигурировать отладку MTS-компонента:

  1. Остановите все серверные процессы на компьютере с Windows NT Server, где установлен MTS. Для этого щелкните правой кнопкой мыши значок My Computer на рабочем столе Windows NT и выберите из контекстного меню команду Shutdown Server Process.
  2. В среде Visual J++ выберите из меню Project команду ИмяПроекта Properties.
  3. Перейдите на вкладку Launch и щелкните переключатель Custom.
  4. В поле Program введите путь к файлу МТх.ехе. По умолчанию он находится в подкаталоге System32 основного каталога Windows NT.
  5. В поле Arguments введите /р:»имя пакета MTS» (имеется в виду пакет MTS, содержащий Ваш компонент). В этом аргументе не должно быть пробелов.
  6. Установите точку прерывания в коде компонента.
  7. Выберите из меню Debug команду Start.
  8. Запустите исполняемый файл, выступающий клиентом Вашего компонента. Когда клиент вызовет участок кода, где Вы поставили точку прерывания, его выполнение приостановится, и Вы сможете пошагово «пройти» нужный блок кода своего компонента.

Отладка Java-апплета

Запустите свой апплет в окне JView или Internet Explorer и действуйте так, как описано в разделе «Базовые процедуры отладки» ранее в этой главе.

к оглавлению   к 4GL - визуальному программированию

Знаете ли Вы, что такое мысленный эксперимент, gedanken experiment?
Это несуществующая практика, потусторонний опыт, воображение того, чего нет на самом деле. Мысленные эксперименты подобны снам наяву. Они рождают чудовищ. В отличие от физического эксперимента, который является опытной проверкой гипотез, "мысленный эксперимент" фокуснически подменяет экспериментальную проверку желаемыми, не проверенными на практике выводами, манипулируя логикообразными построениями, реально нарушающими саму логику путем использования недоказанных посылок в качестве доказанных, то есть путем подмены. Таким образом, основной задачей заявителей "мысленных экспериментов" является обман слушателя или читателя путем замены настоящего физического эксперимента его "куклой" - фиктивными рассуждениями под честное слово без самой физической проверки.
Заполнение физики воображаемыми, "мысленными экспериментами" привело к возникновению абсурдной сюрреалистической, спутанно-запутанной картины мира. Настоящий исследователь должен отличать такие "фантики" от настоящих ценностей.

Релятивисты и позитивисты утверждают, что "мысленный эксперимент" весьма полезный интрумент для проверки теорий (также возникающих в нашем уме) на непротиворечивость. В этом они обманывают людей, так как любая проверка может осуществляться только независимым от объекта проверки источником. Сам заявитель гипотезы не может быть проверкой своего же заявления, так как причина самого этого заявления есть отсутствие видимых для заявителя противоречий в заявлении.

Это мы видим на примере СТО и ОТО, превратившихся в своеобразный вид религии, управляющей наукой и общественным мнением. Никакое количество фактов, противоречащих им, не может преодолеть формулу Эйнштейна: "Если факт не соответствует теории - измените факт" (В другом варианте " - Факт не соответствует теории? - Тем хуже для факта").

Максимально, на что может претендовать "мысленный эксперимент" - это только на внутреннюю непротиворечивость гипотезы в рамках собственной, часто отнюдь не истинной логики заявителя. Соответсвие практике это не проверяет. Настоящая проверка может состояться только в действительном физическом эксперименте.

Эксперимент на то и эксперимент, что он есть не изощрение мысли, а проверка мысли. Непротиворечивая внутри себя мысль не может сама себя проверить. Это доказано Куртом Гёделем.

Понятие "мысленный эксперимент" придумано специально спекулянтами - релятивистами для шулерской подмены реальной проверки мысли на практике (эксперимента) своим "честным словом". Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution