Visual Studio 2008/2010 с пакетом обновления 1 (SP1), как выйти из ловушки? - PullRequest
4 голосов
/ 05 января 2010

Я использую отладчик (vs2008).

Как только я войду в оператор catch, я хотел бы знать, есть ли способ вернуть курсор выполнения в начало попытки.

Просто перетаскивание туда не работает, есть какие-то настройки, которые мне нужно изменить?

Пример:

try 
{
    //Want the cursor back here
}
catch
{
    //some code, cursor is here...
}

Ответы [ 2 ]

2 голосов
/ 05 января 2010

Очевидно, это зависит от того, какую версию .NET вы используете. В то время, когда я впервые писал это, у меня все работало нормально, когда я пытался, но я использовал свой рабочий ПК с установленной 32-битной ОС.

Я использую этот фрагмент кода для проверки:

try
{
    throw new Exception();
}
catch
{
    Console.WriteLine("Error");  // Breakpoint here
}

Нельзя установить курсор на строку try. Он будет находиться на следующей за ним строке (открытие оператора блока).

Перетаскивание курсора на эту строку или строку try отлично работает для меня, когда я компилирую свою программу .NET для x86. Это также будет работать, если вы работаете с 32-битной ОС. Однако, когда вы находитесь в 64-битной среде и компилируете для Любой ЦП или x64 , вы получите следующее сообщение об ошибке:

Unable to set the next statement to this location. The attempt to unwind the callstack failed.

Поскольку это только для целей отладки, возможный обходной путь для вас - компиляция для x86, поэтому будет использоваться 32-разрядная среда выполнения. Перейдите в меню Build и выберите Configuration Manager . В разделе Платформа выберите x86 или Новый ... , если его нет в списке. В последнем случае вы получите новый диалог. Выберите параметры, как показано ниже, и нажмите OK:

New Project Platform

1 голос
/ 05 января 2010

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

Невозможно установить следующий оператор в этом месте. Попытка размотать стек вызовов не удалась.

Разматывание невозможно в следующих сценариях:

  1. Отладка была начата с помощью отладки Just-In-Time.
  2. Идет раскрутка.
  3. Исключение System.StackOverflowException или System.Threading.ThreadAbortException.

При устранении причина, по которой вы не можете перемещать курсор (так же, как установка следующего оператора), должна быть # 2.

...