Пошаговое выполнение программы с возможностью просматривать состояние всех переменных называется

Точка останова (breakpoint) — это сигнал, который указывает отладчику временно остановить выполнение программы в определенной точке. Приостановка выполнения программы в точке останова называется режимом приостановки. Вход в режим приостановки выполнения не приводит к прекращению или завершению работы программы, поэтому выполнение программы может быть продолжено в любое время. В Visual Studio можно помещать на любую строку кода, которая выполняется. Существуют три способа расстановки точек останова в Visual Studio 2010:

  • С помощью клавиши F9;
  • Через пункт меню Debug — Toggle Breakpoint;
  • И самый простой способ — это щелкнуть дважды левой кнопкой мыши на нужной строке, в окне редактора кода внутри затененной области вдоль левого края окна документа.

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

Урок 4 Создание входов, выходов, что такое переменная, базовый элемент «Клемма» программы Flprog

 Установка точки останова в Visual Studio 2010


увеличить изображение
Рис. 19.3. Установка точки останова в Visual Studio 2010

Запуск отладчика

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

  • Способ первый. С помощью специальной панели инструментов, как показано на Рис. 19.4;

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


Рис. 19.4. Запуск режима отладки с панели инструментов

 Запуск режима отладки из меню Debug


Рис. 19.5. Запуск режима отладки из меню Debug

После запуска режима отладки, появится курсор отладки, который остановится напротив первой точки останова (Рис. 19.6).

 Курсор отладки в VIsual Studio


увеличить изображение
Рис. 19.6. Курсор отладки в VIsual Studio

Пошаговое выполнение программы

Для пошаговой отладки используют специальную панель инструментов (Рис. 19.7).

 Специальная панель инструментов отладки


Рис. 19.7. Специальная панель инструментов отладки

Или набор горячих клавиш (которые дублируют работу специальной панели инструментов), список которых представлен ниже:

  • Continue (F5) — продолжить выполнение программы.
  • Stop debugging (Shift+F5) — остановить отладку. При этом остановится и выполнение программы.
  • Restart (Ctrl+Shift+F5) — перезапустить программу. Выполнение программы будет прервано и запустится заново;
  • Show Next Statement (Alt + Num *) — показать следующий оператор, т.е переместить курсор редактора кода в курсор пошагового выполнения;
  • Step Into (F11) — выполнить очередной оператор. Если это метод, то перейти в начало этого метода, чтобы начать отладку;
  • Step Over (F10) — выполнить очередной оператор. Если это метод, то он будет полностью выполнен, т.е. курсор выполнения не будет входить внутрь метода;
  • Step out (Shift + F11) — выйти из метода.

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

Отладка Java кода в IDEA. Основные возможности отладчика.

  • Autos;
  • Locals;
  • Watch;
  • Immediate;
  • Threads;
  • Parallel Task;
  • Parallel Stacks.
Окно Autos

Окно Autos (Рис. 19.8) используется для того чтобы, просматривать значения, связанные с той строкой кода, на которой находится курсор отладки. Это окно отображает значения всех переменных и выражений, имеющихся в текущей выполняющейся строке кода или в предыдущей строке кода. Содержит следующие столбцы:

  • Name — название переменной;
  • Value — значение переменной;
  • Type — тип переменной.

 Окно Autos


увеличить изображение
Рис. 19.8. Окно Autos

Окно Locals

Окно Locals (Рис. 19.9) отображает все переменные и их значения для текущей области видимости отладчика, что дает представление обо всех переменных, которые используются в текущем выполняющемся методе. Переменные в этом окне автоматически настраиваются отладчиком. Данное окно содержит следующие столбцы:

  • Name — название переменной;
  • Value — значение переменной;
  • Type — тип переменной.

 Окно Locals


увеличить изображение
Рис. 19.9. Окно Locals

Окно Watch

Окно Watch или окно контрольных значений (Рис. 19.10) — позволяет настраивать собственный список переменных и выражений, которые необходимо отслеживать.

Всего доступно четыре окна Watch (Watch 1, Watch 2, Watch 3 и Watch 4), что позволяет выделить в четыре списка переменные и выражения, данную возможность удобно использовать в том случае, если каждый список относится к отдельной области видимости приложения. Переменные или выражение в окно Watch добавляются или из редактора кода, или из окна QuickWatch. Если нужно добавить в окно Watch элемент из редактора кода, то нужно выделить нужную переменную или выражение, щелкнуть по ней правой кнопкой мыши и выбирать пункт Add Watch. Также можно перетаскивать, с помощью мыши, выделенный элемент в окно Watch. Данное окно содержит следующие столбцы:

  • Name — название переменной;
  • Value — значение переменной;
  • Type — тип переменной.

 Окно Watch


Рис. 19.10. Окно Watch

Окно Immediate

Окно Immediate или непосредственное выполнение (Рис. 19.11) — предназначено для ручного ввода и выполнения команд. Это окно появляется автоматически при прерывании работы программы в точках останова программы. Для выполнения команды или оператора необходимо написать команду и нажать клавишу .

 Окно Immediate


Рис. 19.11. Окно Immediate

Окно Threads

Окно Threads (Рис. 19.12) — позволяет просматривать и управлять всеми запущенными потокам на различных этапах отладки приложения.

 Окно Threads


увеличить изображение
Рис. 19.12. Окно Threads

По умолчанию в таблице перечисляются все потоки приложения, но можно фильтровать этот список, чтобы в нем показывались только нужные потоки. В каждом столбце содержится свой тип сведений. Сведения о столбцах окна Threads представлены в Табл. 19.3.

Таблица 19.3. Столбцы окна отладки Threads Имя столбца Описание
Флаги Показывает, какие потоки помечены, и позволяет помечать потоки и снимать с них метки.
Значки Желтая стрелка указывает активный поток. Контур стрелки указывает поток, где выполнение было передано в отладчик. Белая стрелка указывает прерванную задачу, т.е. задачу, которая была текущей во время вызова отладчика. Значок паузы указывает поток, замороженный пользователем.
ID Столбец содержит идентификационные номера всех потоков.
Managed ID В столбце содержаться управляемые идентификационные номера управляемых потоков.
Category В данном столбце потоки классифицируются по категориям: потоки пользовательского интерфейса, обработчики удаленного вызова процедур (RPC) и рабочие потоки. Особая категория идентифицирует главный поток приложения.
Name Столбец, в котором для каждого потока указывается имя, если оно имеется, или значение .
Location В данном столбце показывается, где поток выполняется. Можно развернуть это расположение, чтобы отобразить полный стек вызова для потока.
Priority Столбец содержит приоритет потока, назначенный системой каждому потоку.
Affinity Mask Дополнительный столбец, который обычно скрыт. В этом столбце показывается маска сходства процессора для каждого потока. В многопроцессорной системе маска сходства определяет, какой процессор, в каком потоке может работать.
Suspended Столбец содержит счетчик приостановок. Этот счетчик определяет, может ли поток выполняться.

Источник: intuit.ru

Тестирование, отладка и оптимизация

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

Читайте также:
Программа поддержки соотечественников которые переселяются в Россию

Рассмотрим этот этап более подробно. Существуют три аспекта проверки программы на:

Проверка правильности (верификация программы) удостоверяет, что программа делает в точности то, для чего она была предназначена. Качественная программа – это программа, выполняющая заранее объявленные действия известным способом и не выполняющая никаких необъявленных действий.

Статистика свидетельствует, что стоимость такого тестирования программного продукта составляет не менее 50 процентов стоимости начальной разработки и 70 процентов всей стоимости поддержки программного продукта. Но сколько бы сил и денег не было потрачено на тестирование необходимо понимать, что тесты могут доказать наличие ошибок в программе, но они не могут доказать их отсутствия. Один из общих законов программирования гласит, что ни одна программа не дает желаемых результатов при первой попытке ее трансляции и выполнения.

На рисунке изображена диаграмма процентного соотношения причин появления тех или иных ошибок при обработке данных.

Из диаграммы видно, что большинство ошибок совершаются именно на этапе кодирования.

Существуют два типа программных ошибок: синтаксические и семантические. Синтаксические ошибки возникают из-за нарушений правил (лексики) языка программирования и выявляются во время компиляции. Такие ошибки могут быть исключены сравнительно легко. Большинство из них можно выявить путем простого просмотра текста программы.

Чаще всего программисты оставляют этот этап компилятору, однако сквозной просмотр текста иногда бывает полезен. Скорость исправления ошибок, выявленных компилятора зависит от степени знакомства программиста с данным языком. Семантические или логические ошибки приводят к некорректным вычислениям или ошибкам во время выполнения программы (run-time error).

Математическая безупречность алгоритма не гарантирует правильности его перевода в программу. Аналогично разумный вид получаемых результатов не дает достаточной гарантии правильности программы. В общем случае нельзя дать общего решения для проведения проверки на правильность программы.

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

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

1. Чем раньше спроектирован тест, тем вероятнее выявление ошибок. Поэтому лучше готовить тесты еще на этапе проектирования системы.

2. Недопустима хаотичность процесса тестирования. Он должен быть документирован и полностью управляем.

3. Необходимы повторяемость и завершенность тестов.

4. Следует избегать добавления новых тестов в процессе тестирования.

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

Разумеется, таким образом нельзя проверить всевозможные комбинации данных. Однако можно проверить всевозможные типы или наиболее вероятные комбинации данных. Если они дают правильные результаты, предполагается, что непроверенные комбинации также дали бы правильные результаты. Отдельно тестируется каждый модуль программы. Если программа хорошо спроектирована, то после этого остается проверить только интерфейс между модулями.

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

Очень часто тесты (файлы с тестовыми данными) создаются вручную. Следовательно, их число редко превышает два-три десятка. Иногда применяют генераторы тестовых данных – специальные программы, формирующие данные в соответствии со спецификациями задаваемыми программистами. Данные могут группироваться в записи, имеющие установленные форматы. Тестовые данные могут также систематически или случайно выбираться из другого заданного набора данных для уменьшения их общего количества, над которыми выполняется тест.

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

Если прогон программы на тестовых данных дает неверный результат, то необходимо найти и исправить ошибку. При отладке программыиспользуют три основных способа:

— распечатка текущего состояния

Распечатка текущего состояния используется с целью фиксации фактических значений переменных для проверки хода вычислений. Для этого во время отладки программы в местах, которые программист считает критическими, помещают функции вывода на экран текущего состояния переменных. После окончания теста вызовы этих функций удаляются и программа снова перекомпилируется.

Метод «точки останова» обычно применяют при разного рода зацикливаниях. В текст программы включают функции останова программы, например можно вывести на экран сообщение «Достигнута точка n» и вызвать функцию getch(). Этот метод имеет смысл объединять с методом деления пополам. Точка останова ставится в средине программы, если программа выполнилась до этой точки, что точка останова ставиться в средине второй половины программы, если нет, то в средине первой и т.д. Таким образом область поиска ошибки постепенно сужается.

Трассировка – это пошаговое выполнение программы с возможностью просматривать состояние всех переменных. Она может оказаться очень эффективной, но значительно замедляет выполнение программы и не будучи тщательно спланированной, приводит к колоссальным объемам выдаваемой информации.

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

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

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

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

Чтобы улучшить программу, пересматриваются результаты реализации в процессе построения алгоритма. Не рассматривая все возможные варианты и направления оптимизации программ, приведем здесь некоторые полезные способы, направленные на увеличение скорости выполнения программ.

Первый способ основан на следующем правиле. Сложение и вычитание выполняются быстрее, чем умножение и деление. Целочисленная арифметика быстрее арифметики вещественных чисел. Таким образом, X+X лучше, чем 2*X, а (2i+j)*0,5 хуже, чем (i+i+j)*0,5.

Читайте также:
Кто тестирует компьютерные программы

Умножение выолняется быстрее чем деление, например sum*=0,5 лучше чем sum/=2;При выполнении операций над целыми числами следует помнить, что благодаря применению двоичной системы счисления умножение числа, кратные двум, можно заменить соответствующим количеством сдвигов влево. Поэтому 10*А выполняется дольше, чем (A<<3)+(A<<1). (Действительно 10*A=8*A+2*A).

Второй способ заключается в удалении избыточных вычислений.

Пример, вычисление квадратных корней уровнения

Лучшим решением является следующее

Легко увидеть, что в первом случае потребовалось выполнить четыре операции сложения/вычитания, восемь операций умножения, две операции деления, два вызова функции sqrt, во втором — пять операций сложения/вычитания, два умножения, два деления и одно обращение к функции sqrt.

Третий способ проверки эффективности реализации основан на способности некоторых компиляторов строить коды для вычисления логических выражений так, что вычисления прекращаются, если результат становится очевидным. Например, в выражении A||B||C, если A имеет значение «истина», то переменные В и С уже не проверяются. Таким образом, можно сэкономить время, разместив переменные A,B,С так, чтобы первой стояла переменная, которая вероятнее всего будет истинной, а последней та, которая реже всего принимает истинное значение.

Однако следует быть осторожным в следующем примере: ROOL(A)||B||C. ROOL(A) может и чаще принимает значение «истина», но представляет собой вызов функции, возможно выполняющей сложные и длительные вычисления. Тогда может оказаться, что запись В||С||ROOL(A) является более эффективной.

Четвертый прием — исключение циклов.

Пример. Рассмотрим следующий пример: сформировать одномерный массив, каждый элемент которого должен быть равен сумме элементов строки двумерного массива.

можно переписать так

В данном пример выигрыш достигается, во-первых, за счет уменьшения количества циклов (два, а не три), а во-вторых, за счет того, что с введением временной переменной b уменьшено количество операций вычисления адресов элементов массива.

Пятый прием – развертывание циклов.

Пример. Следующий фрагмент

можно переписать так:

Выигрыш в скорости вычислений вполне очевиден.

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

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

Действительно, при вычислении значений переменных с и a используется переменная x, значение которой вычисляется в цикле. Однако, значение переменных все равно определяется значением переменной x, вычисленной на последней итерации цикла. Поэтому эффективнее переписать данный фрагмент следующим образом, применяя чистку цикла вниз:

Кроме указанных способов оптимизации полезно производить чистку программы, то есть удаление из нее ненужных объектов и конструкций:

— удаление идентичных операторов;

— удаление несущественных операторов, то есть операторов не влияющих на результат программы;

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

— удаление функций, к которым нет обращений;

— удаление объявленных, но неиспользуемых переменных, операций и т.д.

Также существует ряд способов экономного расходования памяти:

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

— изменение времени жизни переменной

— перемещение оператора объявление переменной ближе к фрагменту, где переменная используется

— экономия стека: при передаче массива в качестве параметра подпрограммы, следует использовать указатель на массив.

Кроме того, следует делать текст программы более компактным (если это не приводит к ухудшению читабельности). Необходимо следить за дублированием в различных ветвях алгоритмов, и сокращать текст программы за счет оформления повторяющихся фрагментов текста в виде функций. Однако не следует слишком злоупотреблять созданием процедур: наличие большого количества процедур, состоящих из 2-3 операторов, вряд ли можно считать приемлемым.

Это далеко не полный перечень способов оптимизации. Здесь приведены лишь самые очевидные из них. Следует, кроме того, заметить, что не всегда стоит увлекаться погоней за быстродействием, так как при этом чаще ухудшается удобочитаемость программы.

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:

Источник: studopedia.ru

Пошаговое выполнение программы

Для пошаговой отладки используют специальную панель инструментов (Рис. 19.7).

Рис. 19.7. Специальная панель инструментов отладки

Или набор горячих клавиш (которые дублируют работу специальной панели инструментов), список которых представлен ниже:

· Continue (F5) — продолжить выполнение программы.

· Stop debugging (Shift+F5) — остановить отладку. При этом остановится и выполнение программы.

· Restart (Ctrl+Shift+F5) — перезапустить программу. Выполнение программы будет прервано и запустится заново;

· Show Next Statement (Alt + Num *) — показать следующий оператор, т.е переместить курсор редактора кода в курсор пошагового выполнения;

· Step Into (F11) — выполнить очередной оператор. Если это метод, то перейти в начало этого метода, чтобы начать отладку;

· Step Over (F10) — выполнить очередной оператор. Если это метод, то он будет полностью выполнен, т.е. курсор выполнения не будет входить внутрь метода;

· Step out (Shift + F11) — выйти из метода.

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

Окно Autos

Окно Autos (Рис. 19.8) используется для того чтобы, просматривать значения, связанные с той строкой кода, на которой находится курсор отладки. Это окно отображает значения всех переменных и выражений, имеющихся в текущей выполняющейся строке кода или в предыдущей строке кода. Содержит следующие столбцы:

· Name — название переменной;

· Value — значение переменной;

· Type — тип переменной.

увеличить изображение
Рис. 19.8. Окно Autos

Окно Locals

Окно Locals (Рис. 19.9) отображает все переменные и их значения для текущей области видимости отладчика, что дает представление обо всех переменных, которые используются в текущем выполняющемся методе. Переменные в этом окне автоматически настраиваются отладчиком. Данное окно содержит следующие столбцы:

· Name — название переменной;

· Value — значение переменной;

· Type — тип переменной.

увеличить изображение
Рис. 19.9. Окно Locals

Окно Watch

Окно Watch или окно контрольных значений (Рис. 19.10) — позволяет настраивать собственный список переменных и выражений, которые необходимо отслеживать.

Всего доступно четыре окна Watch (Watch 1, Watch 2, Watch 3 и Watch 4), что позволяет выделить в четыре списка переменные и выражения, данную возможность удобно использовать в том случае, если каждый список относится к отдельной области видимости приложения. Переменные или выражение в окно Watch добавляются или из редактора кода, или из окна QuickWatch. Если нужно добавить в окно Watch элемент из редактора кода, то нужно выделить нужную переменную или выражение, щелкнуть по ней правой кнопкой мыши и выбирать пункт Add Watch. Также можно перетаскивать, с помощью мыши, выделенный элемент в окно Watch. Данное окно содержит следующие столбцы:

· Name — название переменной;

· Value — значение переменной;

· Type — тип переменной.

Рис. 19.10. Окно Watch

Окно Immediate

Окно Immediate или непосредственное выполнение (Рис. 19.11) — предназначено для ручного ввода и выполнения команд. Это окно появляется автоматически при прерывании работы программы в точках останова программы. Для выполнения команды или оператора необходимо написать команду и нажать клавишу .

Читайте также:
Как внести данные в программе 1с

Рис. 19.11. Окно Immediate

Окно Threads

Окно Threads (Рис. 19.12) — позволяет просматривать и управлять всеми запущенными потокам на различных этапах отладки приложения.

увеличить изображение
Рис. 19.12. Окно Threads

По умолчанию в таблице перечисляются все потоки приложения, но можно фильтровать этот список, чтобы в нем показывались только нужные потоки. В каждом столбце содержится свой тип сведений. Сведения о столбцах окна Threads представлены в Табл. 19.3.

Таблица 19.3. Столбцы окна отладки Threads
Имя столбца Описание
Флаги Показывает, какие потоки помечены, и позволяет помечать потоки и снимать с них метки.
Значки Желтая стрелка указывает активный поток. Контур стрелки указывает поток, где выполнение было передано в отладчик. Белая стрелка указывает прерванную задачу, т.е. задачу, которая была текущей во время вызова отладчика. Значок паузы указывает поток, замороженный пользователем.
ID Столбец содержит идентификационные номера всех потоков.
Managed ID В столбце содержаться управляемые идентификационные номера управляемых потоков.
Category В данном столбце потоки классифицируются по категориям: потоки пользовательского интерфейса, обработчики удаленного вызова процедур (RPC) и рабочие потоки. Особая категория идентифицирует главный поток приложения.
Name Столбец, в котором для каждого потока указывается имя, если оно имеется, или значение .
Location В данном столбце показывается, где поток выполняется. Можно развернуть это расположение, чтобы отобразить полный стек вызова для потока.
Priority Столбец содержит приоритет потока, назначенный системой каждому потоку.
Affinity Mask Дополнительный столбец, который обычно скрыт. В этом столбце показывается маска сходства процессора для каждого потока. В многопроцессорной системе маска сходства определяет, какой процессор, в каком потоке может работать.
Suspended Столбец содержит счетчик приостановок. Этот счетчик определяет, может ли поток выполняться.

Окно Parallel Task

Окно Parallel Task (Рис. 19.13) или окно параллельных задач — выглядит как окно Threads (потоки), за исключением того, что отображает сведения о каждой задаче или объекте task_handle, вместо сведений о каждом потоке. Как и потоки, задачи представляют асинхронные операции, которые могут выполняться параллельно, однако несколько задач могут выполняться в одном потоке.

Рис. 19.13. Окно Parallel Task

Сведения о столбцах окна Parallel Tasks представлены в Табл. 19.4.

Таблица 19.4. Столбцы окна Parallel Task
Имя столбца Описание
Флаги Показывает, какие задачи помечены, и позволяет помечать задачи и снимать с них метки.
Значки Рядом с текущей задачей отображается желтая стрелка. Текущая задача находится на самом верхнем уровне текущего потока. Белая стрелка указывает прерванную задачу, т.е. задачу, которая была текущей во время вызова отладчика. Значок паузы указывает задачу, замороженную пользователем.
ID Столбец содержит предоставленный системой номер задачи. В машинном коде этот номер является адресом задачи.
Status Столбец отображает текущее состояние задачи: · Запланированная задача — это задача, которая еще не выполнялась и, следовательно, не имеет стека вызова, назначенного потока и других соответствующих сведений. · Запущенная задача — это задача, которая выполняла код, пока не была прервана в отладчике. · Находящаяся в ожидании задача — это задача, заблокированная вследствие ожидания сигнала события, освобождения блокировки или завершения другой задачи. · Заблокированная задача — это находящаяся в ожидании задача, чей поток заблокирован другим потоком.
Location Столбец, который отображает текущее расположение в стеке вызова задачи.
Task Столбец отображает исходный метод и аргументы, которые были переданы в задачу при ее создании.
Parent Столбец содержит идентификатор задачи, создавшей данную задачу. Если эта ячейка пуста, то у задачи нет родительской задачи. Это применимо только для управляемых программ.
Thread Assignment Данный столбец содержит идентификатор и имя потока, в котором запущена задача.
AppDomain Столбец содержит информацию о домене приложения (для управляемого кода), в котором выполняется задача.
task_group Столбец отображает информацию о адрес объекта task_group, который запланировал задачу. Для асинхронных агентов и упрощенных задач этот столбец содержит значение 0.

Окно Parallel Stacks

Окно Parallel Stacks или параллельные стеки (Рис. 19.14) — это окно применяется при отладке многопоточных приложений, и содержит сведения о стеке вызова для всех потоков приложения. Оно также позволяет переходить в различные потоки и кадры стека в потоках.

увеличить изображение
Рис. 19.14. Окно Parallel Stacks

На Рис. 19.14 — путь вызова текущего потока выделен, синим, а активный кадр стека обозначается желтой стрелкой. Текущий кадр стека можно изменить, выбрав другой метод в окне Parallel Stacks. При этом также может измениться текущий поток в зависимости от того, входит ли выбранный метод в текущий поток или является частью другого потока. В Табл. 19.5 представлены компоненты окна Parallel Stacks

Таблица 19.5. Компоненты окна Parallel Stacks
Имя элемента Описание
A Сегмент или узел стека вызова Содержит последовательности контекстов методов для одного или нескольких потоков. Если узел не имеет линий со стрелками, то он представляет собой единый путь вызова для потоков.
B Синее выделение Указывает путь вызова текущего потока.
C Линии со стрелками Соединяют узлы и показывают единый путь вызова для потоков.
D Всплывающая подсказка заголовка узла Показывает идентификатор и пользовательское имя каждого потока, путь вызова которого использует данный узел.
E Контекст метода Представляет один или несколько кадров стека одного метода.
F Всплывающая подсказка для контекста метода Показывает подробные сведения всех кадров стека, которые представляются контекстом метода. Кадры стека для текущего потока отображаются жирным шрифтом.

В Табл. 19.6 описываются значки, которые предоставляют сведения об активных и текущих кадрах стека.

Таблица 19.6. Значки сведений об активных и текущих кадрах стека
Значок Описание
Указывает на то, что контекст метода содержит активный кадр стека текущего потока.
Указывает на то, что контекст метода содержит активный кадр стека потока, который не является текущим.
Указывает на то, что контекст метода содержит текущий кадр стека. Имя этого метода выделено жирным шрифтом во всех узлах.

На Рис. 19.15 и в Табл. 19.7 представлены элементы управления, доступные на панели управления «Параллельные стеки».

Рис. 19.15. Элементы управления окна Parallel Stacks

Таблица 19.7. Элементы управления окна Parallel Stacks
Элемент управления Описание
A Поле со списком «Потоки»/»Задачи» Переключает отображение между стеками вызова для потоков и стеками вызова для задач.
B Показывать только помеченные Отображает стеки вызова только для потоков (или задач), помеченных в окнах «Потоки» или «Параллельные задачи».
C Представление метода Переключает представление стека и представление метода.
D Автопрокрутка к текущему кадру стека Автоматически прокручивает схему для отображения текущего кадра стека. Этот компонент применяется при изменении текущего кадра стека из других окон или при появлении точки останова в крупных диаграммах.
E Переключить элемент управления масштабом Отображает или скрывает элемент управления масштабом. Чтобы изменить масштаб, можно также нажать клавишу CTRL и повернуть колесо мыши вне зависимости от того, где находится элемент управления.

Источник: poisk-ru.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru