Visual studio отладка нескольких проектов

Обновлено: 05.07.2024

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

Я использовал Visual Studio в течение многих лет, но это первый раз, когда я создал любую консольную программу.

Когда я запускаю приложение, появляется окно консоли, появляется выход программы, а затем окно закрывается по мере выхода приложения.

Есть ли способ открыть его, пока я не проверил вывод или не просмотрел результаты после закрытия окна?

ОТВЕТЫ

Ответ 1

Если вы запускаете без отладки (Ctrl + F5), то по умолчанию он предлагает вам нажать return, чтобы закрыть окно. Если вы хотите использовать отладчик, вы должны поставить точку останова в последней строке.

Ответ 2

Щелкните правой кнопкой мыши на вашем проекте

Свойства> Свойства конфигурации> Линкер> Система

Выберите Console (/SUBSYSTEM: CONSOLE) в опции SubSystem или вы можете просто ввести Console в текстовое поле!

Теперь попробуйте. это должно работать

Ответ 3

Вот способ для C/С++:

Ответ 4

Откройте меню отладки- > Нажмите Начать без использования

Ответ 5

Он будет ждать <ENTER> .

Ответ 6

попробуйте вызвать getchar() прямо перед возвратом main() .

Ответ 7

(/SUBSYSTEM: CONSOLE) не работал для моего vs2013 (у меня его уже было).

"run without debugging" не является параметром, так как я не хочу переключаться между отладкой и просмотром вывода.

Решение, используемое в qtcreator до 2.6. Теперь, когда qt растет, vs идет другим путем. Насколько я помню, в vs2008 нам не нужны такие трюки.

Ответ 8

Здесь решение, что (1) не требует каких-либо изменений кода или точек останова, и (2) приостанавливается после завершения программы, чтобы вы могли видеть все, что было напечатано. Он остановится после F5 или Ctrl + F5. Основной недостаток заключается в том, что на VS2013 Express (как проверено) он не загружает символы, поэтому отладка очень ограничена.

Создайте командный файл. Я назвал мой runthenpause.bat со следующим содержимым:

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

Откройте свойства проекта | Конфигурационные свойства | Отладка.

Теперь, когда вы запустите, runthenpause.bat запустит ваше приложение, и после того, как ваше приложение завершится, вы остановитесь, чтобы увидеть вывод консоли.

Я опубликую обновление, если выясню, как загрузить символы. Я пробовал /Z7 за этот, но безуспешно.

Ответ 9

просто введите свою последнюю строку кода:

Ответ 10

Начиная с Visual Studio 2017 (15.9.4) есть опция:

Автоматически закрывать консоль, когда отладка прекращается:

Сообщает Visual Studio закрыть консоль в конце сеанса отладки.

Ответ 11

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

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

Ответ 12

добавить "| pause" в поле аргументов команды в разделе отладки в свойствах проекта.

Ответ 13

Просто нажмите CNTRL + F5, чтобы открыть его во внешнем окне командной строки (Visual Studio не контролирует его).

Если это не сработает, добавьте следующее в конец вашего кода:

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

Если вы хотите сделать это в нескольких местах, поместите вышеуказанный код в метод (например, private void Pause() ) и вызовите Pause() всякий раз, когда программа достигает возможного конца.

Ответ 14

Несколько лучшее решение:

в начале вашей программы.

  • может использовать std:: exit()
  • может иметь несколько возвратов из основного
  • вы можете запустить свою программу под отладчиком
  • Независимый IDE (+ независимый от ОС, если вы используете трюк cin.sync(); cin.ignore(); вместо system("pause"); )
  • необходимо изменить код
  • не будет останавливаться на std:: terminate()
  • все равно произойдет в вашей программе вне сеанса IDE/debugger; вы можете предотвратить это под Windows, используя:

Ответ 15

Обязательно сделайте любой из них в конце функции main() и перед оператором return .

Ответ 16

В моем случае я испытал это, когда создал проект Empty C++ в версии VS 2017 для сообщества. Вам нужно будет установить для подсистемы значение "Консоль (/SUBSYSTEM: CONSOLE)" в разделе "Свойства конфигурации".

  1. Зайдите в "Просмотр", затем выберите "Менеджер недвижимости"
  2. Щелкните правой кнопкой мыши на проекте/решении и выберите "Свойство". Откроется страница свойств теста.
  3. Перейдите к компоновщику, затем выберите "Система"
  4. Нажмите "Подсистема" и появится выпадающий
  5. Выберите "Консоль (/SUBSYSTEM: CONSOLE)"
  6. Применить и сохранить
  7. В следующий раз, когда вы запустите свой код с помощью "CTRL +F5", вы должны увидеть результат.

Ответ 17

Вы также можете использовать эту опцию

Ответ 18

Ответ 19

Visual Studio 2015, импорт. Потому что я ненавижу когда примеры кода не дают необходимых импортов.

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

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

Если в решении Visual Studio могут независимо выполняться несколько проектов, можно выбрать проект, запускаемый отладчиком. Текущий запускаемый проект отображается полужирным шрифтом в обозревателе решений.

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

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

Назначение запускаемого проекта или нескольких проектов на странице свойств решения

Выберите решение в обозревателе решений и щелкните значок Свойства на панели инструментов либо щелкните это решение правой кнопкой мыши и выберите пункт Свойства.

На странице Свойства выберите Общие свойства > Запускаемый проект.

Изменение типа запуска для проекта

Выберите Текущий выбор, Один запускаемый проект и файл проекта либо выберите Несколько запускаемых проектов.

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

Нажмите Применить или OK, чтобы применить изменения и закрыть диалоговое окно.

Присоединение к процессу

Отладчик также может присоединяться к приложениям, выполняемым в процессах вне Visual Studio, включая процессы на удаленных устройствах. После присоединения к приложению можно использовать отладчик Visual Studio. Функции отладки могут быть ограничены. Это зависит от того, было ли приложение построено с отладочной информацией, есть ли у вас доступ к исходному коду приложения и отслеживает ли JIT-компилятор отладочную информацию.

Присоединение к выполняющемуся процессу:

После запуска приложения выберите Отладка > Присоединить к процессу.

Диалоговое окно "Присоединение к процессу"

В диалоговом окне Присоединение к процессу выделите процесс в списке Доступные процессы и щелкните Присоединить.

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

Использование редактора реестра для автоматического запуска процесса в отладчике

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

Запустите редактор реестра Windows с помощью regedit.exe.

В редакторе реестра перейдите к параметрам выполнения файла HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image.

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

Если приложение не указано в качестве дочерней папки, щелкните правой кнопкой мыши Параметры выполнения файла образа, выберите Создать > Раздел и введите имя приложения. Или щелкните правой кнопкой мыши новый раздел в дереве, выберите команду Переименовать, а затем введите имя приложения.

Щелкните правой кнопкой мыши новый раздел в дереве и выберите Создать > Строковое значение.

Измените имя нового значения с Новое значение № 1 на debugger .

Щелкните debugger правой кнопкой мыши и выберите Изменить.

Диалоговое окно "Изменение строки"

В диалоговом окне Изменение строки введите vsjitdebugger.exe в поле Данные значения, а затем нажмите кнопку OK.

Запись автоматического запуска отладчика в regedit.exe

Отладка с несколькими процессами

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

Включение или отключение приостановки всех процессов при прерывании одного процесса

  • Выберите Сервис (или Отладка) > Параметры > Отладка > Общие, затем установите или снимите флажок Прерывать все процессы при прерывании одного процесса.

Команды прерывания, пошагового выполнения и продолжения выполнения

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

Команда Selected Выбор отменен
Отладка > Остановить все Все процессы приостанавливаются. Все процессы приостанавливаются.
Отладка > Продолжить Все процессы возобновляются. Все приостановленные процессы возобновляются.
Отладка > Шаг с заходом, Шаг с обходом или Шаг с выходом Во время выполнения шага текущего процесса все процессы выполняются.
Затем все процессы приостанавливаются.
Текущий процесс выполняется пошагово.
Приостановленные процессы возобновляются.
Выполняемые процессы продолжают выполняться.
Отладка > Шаг с заходом (только текущий процесс) , Шаг с обходом (только текущий процесс) или Шаг с выходом (только текущий процесс) Н/Д Текущий процесс выполняется пошагово.
Остальные процессы сохраняют свое текущее состояние (остаются приостановленными или продолжают выполняться).
Окно исходного кода — Точка остановка Все процессы приостанавливаются. Приостанавливается только процесс окна исходного кода.
Окно исходного кода — Выполнить до курсора
Окно исходного кода должно находиться в текущем процессе.
Все процессы выполняются, а процесс в окне исходного кода выполняется до курсора и приостанавливается.
После этого приостанавливаются все остальные процессы.
Процесс в окне исходного кода выполняется до курсора.
Остальные процессы сохраняют свое текущее состояние (остаются приостановленными или продолжают выполняться).
Окно Процессы > Остановить процесс Н/Д Выбранный процесс приостанавливается.
Остальные процессы сохраняют свое текущее состояние (остаются приостановленными или продолжают выполняться).
Окно Процессы > Продолжить процесс Н/Д Выбранный процесс возобновляется.
Остальные процессы сохраняют свое текущее состояние (остаются приостановленными или продолжают выполняться).

Поиск исходных файлов и файлов символов (PDB)

Для перехода по исходному коду процесса отладчику требуется доступ к исходным файлам и файлам символов процесса. Дополнительные сведения см. в разделе Указание файлов символов (PDB) и исходных файлов.

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

Переключение между процессами

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

Установка текущего процесса на панели инструментов "Место отладки"

Чтобы открыть панель инструментов Место отладки, выберите Вид > Панели инструментов > Место отладки.

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

Переключение между процессами

Установка текущего процесса в окне "Процессы"

Чтобы открыть окно Процессы, во время отладки выберите Отладка > Окна > Процессы.

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

Окно "Процессы"

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

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

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

Если в отладчике был запущен текущий процесс, этот процесс завершается.

Если отладчик был присоединен к текущему процессу, отладчик отсоединяется от процесса, не прекращая его выполнение.

Если отладка процесса запущена из решения Visual Studio, присоединитесь к другому уже запущенному процессу, затем выберите Остановить отладку и сеанс отладки завершится. Процесс, запущенный в Visual Studio, завершится, а процесс, к которому вы присоединились, продолжит выполняться.

Чтобы управлять влиянием параметра Остановить отладку на отдельный процесс, в окне Процессы щелкните процесс правой кнопкой мыши и выберите или снимите флажок Отсоединиться при остановке отладки.

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

Команды остановки, окончания и отсоединения

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

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

И так, предположим, что у нас есть решение (Solution), которое содержит два проекта: Example1 и Example2. Обычно, если в решение содержится несколько проектов, то при запуске приложения в режиме отладки, будет запущен тот проект, который имеет отметку startUp project. Его имя обычно выделено жирным цветом в окне Solution Explorer.

окно Solution Explorer

Если сейчас нажать на кнопку F5 или Ctrl+F5, то начнётся стандартный процесс сборки и компиляции файлов, в результате чего будет запущено приложение Example1.

первая форма

Если же мы хотим, чтобы при нажатии на одну из этих кнопок запускалось приложение Example2, то нам нужно в окне Solution Explorer сначала выделить второй проект, а затем, нажав на нём правую кнопку мышки, в появившемся меню нажать на пункт: Set as StartUP Project.

выбор пункта меню

Нажимаем на кнопку F5, теперь открывается второе приложение.

вторая форма

Как видно по отдельности запускать приложения для отладки не сложно, но что делать, если требуется запустить сразу два приложения?

Запуск двух приложений

В окне Solution Explorer выделите текущее решение (Solution) и нажмите правую кнопку мыши. В появившемся меню нажмите на пункт Properties.

меню

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

property pages

В этом меню есть три пункта, давайте рассмотрим каждый из них.

Current selection

Данный пункт позволяет автоматически выбирать проект для запуска. То есть ранее для того, чтобы сделать, например второй проект (Example2) стартовым нам нужно было сначала вручную открыть меню, потом нажать на пункт Set as StartUP Project. Теперь же, используя пункт меню Current selection, мы можем забыть об этом действии. Достаточно всего лишь выбрать в окне Solution Explorer любой файл, как тут же Visual Studio автоматически определит, какому проекту он принадлежит, после чего сделает этот проект стартовым.

первый пункт меню

Single StartUp project

С помощью пункта Single StartUp project мы так же можем определить, какой из двух проектов должна запустить Visual Studio, для процесса сборки, компиляции и последующего запуска приложения в режиме отладки или без неё. То есть, по сути, этот пункт выполняет те же действие, что и пункт меню Set as StartUP Project в окне Solution Explorer, о котором рассказывалось чуть ранее.

второй пункт меню

Multiple startUp Projects

Ну а вот собственно и тот самый пункт, который позволит нам запустить сразу два приложения в режиме отладки в программе Visual Studio. Пункт Multiple startUp Projects содержит таблицу, в которой в данный момент содержится два проекта из нашего решения. Рядом с каждым из них есть пункт Action с установленным значением: none, то есть не выполнять никаких действий. В этом можно легко убедиться, если сейчас закрыть данное окно и нажать на клавишу F5 или Ctrl+F5.

третий пункт меню

Чтобы сразу запустить два проекта нужно текущее значение поля действие (Action) установить либо в значение: Start (запуск с отладкой) либо в значение: Start without debugging (запуск без отладки).

меню Action

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

значения поля Action

запуск двух приложений

Теперь на экране появилось сразу две формы, а значит в данный момент запущено сразу два приложения, задача решена.

В этой статье я расскажу, как отлаживать многопоточные приложения в Visual Studio 2010, используя окна Parallel Tasks и Parallel Stacks. Эти окна помогут понять структуру выполнения многопоточных приложений и проверить правильность работы кода, который использует Task Parallel Library.

  • Как смотреть call stacks выполняемых потоков
  • Как посмотреть список заданий созданных в нашем приложении (System.Threading.Tasks.Task)
  • Как перемещаться в окнах отладки Parallel Tasks и Parallel Stacks
  • Узнаем интересные и полезные мелочи в отладки с vs2010

Осторожно, много картинок

Подготовка

Для тестов нам потребуется VS 2010. Изображения в этой статье получены с использованием процессора Intel Core i3

Код проекта

Код для языков VB и C++ можно найти на этой странице

using System;
using System.Threading;
using System.Threading.Tasks;
using System.Diagnostics;

static void A( object o)
B(o);
>
static void B( object o)
C(o);
>
static void C( object o)
int temp = ( int )o;

Interlocked.Increment( ref aa);
while (aa < 4)
;
>

//after
L(o);
>
static void F( object o)
G(o);
>
static void G( object o)
H(o);
>
static void H( object o)
// break here at the same time as E and K
Interlocked.Increment( ref bb);
Monitor.Enter(mylock);
while (bb < 3)
;
>
Monitor.Exit(mylock);

//after
L(o);
>
static void I( object o)
J(o);
>
static void J( object o)
int temp2 = ( int )o;

switch (temp2)
case 3:
t4.Wait();
break ;
case 4:
K(o);
break ;
default :
Debug.Assert( false , "fool2" );
break ;
>
>
static void K( object o)
// break here at the same time as E and H
Interlocked.Increment( ref bb);
Monitor.Enter(mylock);
while (bb < 3)
;
>
Monitor.Exit(mylock);

//after
L(o);
>
static void L( object oo)
int temp3 = ( int )oo;

switch (temp3)
case 1:
M(oo);
break ;
case 2:
N(oo);
break ;
case 4:
O(oo);
break ;
default :
Debug.Assert( false , "fool3" );
break ;
>
>
static void M( object o)
// breaks here at the same time as N and Q
Interlocked.Increment( ref cc);
while (cc < 3)
;
>
//BP3 - 1 in M, 2 in N, 3 still in J, 4 in O, 5 in Q
Debugger.Break();
Interlocked.Increment( ref cc);
while ( true )
Thread.Sleep(500); // for ever
>
static void N( object o)
// breaks here at the same time as M and Q
Interlocked.Increment( ref cc);
while (cc < 4)
;
>
R(o);
>
static void O( object o)
Task t5 = Task.Factory.StartNew(P, TaskCreationOptions.AttachedToParent);
t5.Wait();
R(o);
>
static void P()
Console .WriteLine( "t5 runs " + Task.CurrentId.ToString());
Q();
>
static void Q()
// breaks here at the same time as N and M
Interlocked.Increment( ref cc);
while (cc < 4)
;
>
// task 5 dies here freeing task 4 (its parent)
Console .WriteLine( "t5 dies " + Task.CurrentId.ToString());
waitFor5 = false ;
>
static void R( object o)
if (( int )o == 2)
//wait for task5 to die
while (waitFor5)

int i;
//spin up all procs
for (i = 0; i < pcount - 4; i++)
Task t = Task.Factory.StartNew(() => < while ( true );>);
Console .WriteLine( "Started task " + t.Id.ToString());
>

Task.Factory.StartNew(T, i + 1 + 5, TaskCreationOptions.AttachedToParent); //scheduled
Task.Factory.StartNew(T, i + 2 + 5, TaskCreationOptions.AttachedToParent); //scheduled
Task.Factory.StartNew(T, i + 3 + 5, TaskCreationOptions.AttachedToParent); //scheduled
Task.Factory.StartNew(T, i + 4 + 5, TaskCreationOptions.AttachedToParent); //scheduled
Task.Factory.StartNew(T, (i + 5 + 5).ToString(), TaskCreationOptions.AttachedToParent); //scheduled

//BP4 - 1 in M, 2 in R, 3 in J, 4 in R, 5 died
Debugger.Break();
>
else
Debug.Assert(( int )o == 4);
t3.Wait();
>
>
static void T( object o)
Console .WriteLine( "Scheduled run " + Task.CurrentId.ToString());
>
static Task t1, t2, t3, t4;
static int aa = 0;
static int bb = 0;
static int cc = 0;
static bool waitFor1 = true ;
static bool waitFor5 = true ;
static int pcount;
static S mylock = new S();
>

* This source code was highlighted with Source Code Highlighter .

Parallel Stacks Window: Threads View (Потоки)

Шаг 1

Копируем код в студию в новый проект и запускаем в режиме отладки (F5). Программа скомпилируется, запустится и остановится в первой точке остановки.
В меню Debug→Windows нажимаем на Parallel Stacks. С помощью этого окна мы можем посмотреть несколько стеков вызовов параллельных потоков. На следующем рисунке показано состояние программы в первой точке остановки. Окно Call Stack включается там же, в меню Debug→Windows. Эти окна доступны только во время отладки программы. Во время написания кода их просто не видно.

image

На картинке 4 потока сгруппированы вместе, потому что их стек фреймы (stack frames) принадлежат одному контексту метода (method context), это значит, что это один и тот же метод (А, B, C). Чтобы посмотреть ID потока нужно навести на заголовок «4 Threads». Текущий поток будет выделен жирным. Желтая стрелка означает активный стек фрейм в текущем потоке. Чтобы получить дополнительную информацию нужно навести мышкой.

image

Чтобы убрать лишнюю информацию или включить (например название модуля, сдвиг, имена параметров и их типы и пр.) нужно щелкнуть правой кнопкой мышки по заголовку таблицы в окошке Call Stack (аналогично делается во всем окружении Windows).

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

Шаг 2

Продолжаем выполнение программы до второй точки остановки (F5). На следующем слайде видно состояние потоков во второй точке.

image

На первом шаге 4 потока пришли из методов A, B и C. Эта информация до сих пор доступна в окне Parallel Stacks, но теперь эти 4 потока получили развитие дальше. Один поток продолжился в D, затем в E. Другой в F, G и потом в H. Два остальных в I и J, а оттуда один из них направился в K а другой пошел своим путем в non-user External Code.

Можно переключиться на другой поток, для этого двойной щелчек на потоке. Я хочу посмотреть метод K. Для этого двойной клик по MyCalss.K

image

Parallel Stacks покажет информацию, а отладчик в студии покажет код этого места. Нажимаем Toggle Method View и наблюдаем картину истории (иерархии) методов до K.

image

Шаг 3

Продолжаем отладку до 3 прерывания.

image

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

image

Метод L выделен жирным так же в двух других рамках, так что можно видеть где он еще появится. Чтобы увидеть какие фреймы вызывают метод L переключаем режим отображения (Toggle Method View). Получаем следующее:

image

В контекстном меню есть такие пункты как «Hexadecimal Display» и «Show External Code». При включении последнего режима диаграмма получается больше чем предыдущая и содержит информацию о non-user code.

image

Шаг 4

Продолжаем выполнение программы до четвертого прерывания.

В этот раз диаграмма получится очень большой и на помощь приходит автоскролл, который сразу переводит на нужное место. The Bird's Eye View также помогает быстро ориентироваться в больших диаграммах. (маленькая кнопочка справа внизу). Авто зум и прочие радости помогают ориентироваться в действительно больших многопоточных приложениях.

image

Parallel Tasks Window и Tasks View в окне Parallel Stacks

Шаг 1

Завершаем работу программы (Shift + F5) или в меню отладки. Закрываем все лишние окошки с которыми мы экспериментировали в прошлом примере и открываем новые: Debug→Windows→Threads, Debug→Windows→Call Stack и лепим их к краям студии. Также открываем Debug→Windows→ Parallel Tasks. Вот что получилось в окне Parallel Tasks

image

Для каждого запущенного задания есть ID который возвращает значение одноименного свойства задания, местоположение задания (если навести мышь на Console, то появится целый стек вызовов) а также метод, который был принят как отправная точка задания (старт задания).

Шаг 2

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

image

Задание можно отметить флагом и следить за дальнейшим состоянием.

В окне Parallel Stack, которое мы использовали в предыдущем примере, есть переключатель просмотра с потоков на задания (слева вверху). Переключаем вид на Tasks

image

Шаг 3

image

Как видно из скриншота – новое задание 5 выполняется, а задачи 3 и 4 остановлены. Также можно изменить вид таблицы – правая кнопка мыши по заголовкам колонок. Если включить отображение предка задачи (Parent) то мы увидим, кто является предком задачи номер 5. Но для лучшей визуализации отношений можно включить специальный вид – ПКМ по колонке Parent→Parent Child View.

image

Окна Parallel Tasks и Parallel Stack – синхронизированы. Так что мы можем посмотреть какая задача в каком потоке выполняется. Например задача 4. Двойной клик по задаче 4 в окне Parallel Tasks, с этим кликом выполнится синхронизация с окном Parallel Stack и мы увидим такую картину

image

В окне Parallel Stack, в режиме задач можно перейти к поток. Для этого ПКМ на методе и Go To Thread. В нашем примере мы посмотрим что происходит с методом O.

image

Шаг 4

Продолжаем выполнение до следующей точки. Затем сортируем задачи по ID и видим следующее

image

В списке нет задачи 5, потому что она уже завершена. Задачи 3 и 4 ждут друг друга и зашли в тупик. Есть еще 5 новых задач от задачи 2, которые теперь запланированы на исполнение.

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

image

Задачи в списке задач можно сгруппировать. Например сгруппируем по статусу – ПКМ на колонке статус и Group by Status. Результат на скриншоте:

image

Еще несколько возможностей окошка Parallel Tasks: в контекстном меню можно заморозить задачи, можно заморозить основной поток задачи.

Заключение

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

Литература
Видео
Блог Daniel Moth

Спасибо за внимание и поменьше вам ошибок в многопоточных приложениях :)

Lorem ipsum dolor

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

Отладка кода — это один из самых важных процессов. Без отладки в свет не выходит ни одно нормальное приложение. Потому что , независимо от опыта разработчика, код не всегда работает так , как нужно. А иногда и вообще работает совершенно не так. Вот тут как раз и приходит на помощь отладчик, который позволит разобраться , что не так , и найти изъяны. Можно , конечно , много часов провести за самостоятельным выявлением багов, но отладчиком все-таки быстрее и проще.

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

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

Отладка кода в Visual Studio

  • орфографические ошибки или опечатки,
  • неправильно подключенные API,
  • неправильное размещение последних корректировок в код,
  • и др.
  • ошибка компиляции;
  • ошибка преобразования типа;
  • код не поддерживает синтаксис;
  • и др .

Как запустить отладчик Visual Studio

  1. Запустить саму программу Visual Studio.
  2. Откр ыть код приложения, который необходимо отладить.
  3. Потом при помощи нажатия клавиши «F5» запустить режим отладки. Также это можно сделать через меню, если нажать «Отладка», а потом «Начать отладку» .
  • последовательность исполнения кода;

  • работу памяти;

  • значение переменных и др.

Какая информация выводится отладчиком Visual Studio

В заключение

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

Мы будем очень благодарны

если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

Читайте также: