Есть ли способ остаться в текущем документе после "взломать все" в Visual Studio? - программирование
Подтвердить что ты не робот

Есть ли способ остаться в текущем документе после "взломать все" в Visual Studio?

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

4b9b3361

Ответ 1

Существует способ остаться в текущем документе, но для этого требуется создание надстройки Visual Studio и новой команды пользовательского интерфейса на панели инструментов Debug. Кредиты для этого ответа должны также перейти на openshac, который разместил аналогичные SO question и также дал обходной путь в его OP с помощью макроса.

Реализация довольно проста (мне потребовалось несколько минут, чтобы она работала). Во-первых, в проекте надстройки измените метод Exec в файле Connect.cs следующим образом:

public void Exec(string commandName, vsCommandExecOption executeOption, ref object varIn, ref object varOut, ref bool handled)
{
    handled = false;
    if(executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault)
    {
        if(commandName == "BreakInCurrentDocument.Connect.BreakInCurrentDocument")
        {

            // here where the magic happens
            // ******************************
            var activeWindow = _applicationObject.ActiveWindow;
            _applicationObject.Debugger.Break();
            if (_applicationObject.ActiveWindow != activeWindow)
            {
                _applicationObject.ActiveWindow.Close(vsSaveChanges.vsSaveChangesNo);
            }
            // ******************************

            handled = true;
            return;
        }
    }
}

После создания и регистрации надстройки просто:

  • щелкните ИНСТРУМЕНТЫ в меню Visual Studio
  • Настройка
  • Команды
  • Выберите переключатель "Панель инструментов"
  • Выберите "Отладка"
  • Добавить команду...
  • В категории "Добавить" выберите пользовательскую надстройку.

Что это.

Ответ 2

Последняя версия расширения VSCommands (бесплатная версия), доступная от http://visualstudiogallery.msdn.microsoft.com/a83505c6-77b3-44a6-b53b-73d77cba84c8, имеет только то, что вы хотите. Он добавляет кнопку "Разрыв в текущем документе" для панели "Отладка" и "Отладка":

http://vscommands.squaredinfinity.com/Media/VSCommands/BlogPost//blog/breakincurrentdocument.png

Ответ 3

Это особенность.. когда вы делаете "сломать все", тогда предполагается, что ваш процесс зависел. Первое, что вас может заинтересовать в таком случае, - ГДЕ. Следовательно, он направляет вас прямо к текущему месту, которое выполняется. IIRC, это стандарт defacto для всех низкоуровневых отладчиков. Если вы не хотите, чтобы "никакие символы не загружались", просто отметьте "демонстрацию демонстрации", и она больше не появится снова:) (конечно, вместо этого вы увидите точную точку остановки. И да, это также что я сам много раз использовал для отладки неизвестного кода библиотеки)

С другой стороны, если вы знаете, где вы хотите, чтобы код был остановлен, поместите вместо него точку останова.

На другой руке (как если бы у нас было три), если вы хотите остановить приложение - остановите его, не прерывайте, просто остановитесь.

Я чувствую, что ваша настоящая проблема заключается в том, что вы используете одну из функций неправильно, и поэтому другая функция вас обманывает. Скажите, пожалуйста, что вы используете для "break all" и как/почему он сталкивается с вашим текущим редактированием текста. Почему бы вам не остановиться или не наткнуться здесь? Или "отсоединить"?

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


ИЗМЕНИТЬ

AAhh.. ты прав. Я полностью забыл о славном редактировании и продолжении. Я не шучу/дразня, E & C - отличная функция, которую я желаю всем остальным платформам. Я забыл об этом, потому что... Я широко использую функции lambdas, generics, foreachs и т.д., Которые эффективно блокируют редактирование и продолжение.

В любом случае, дело в том, что редактирование и продолжение - это золотая функция, которую вы хотите использовать - приложение должно быть в режиме "break". Тем не менее, тем не менее, как "break" / "pause" и т.д., IDE будет считать, что PAUSE была вашей целью, а не редактированием, поэтому она покажет вам, где вы приостановили приложение.

В MSVS есть несколько вариантов, таких как "показать только мой код", которые могут вам немного помочь, но это не решит проблему: редактирование и продолжение во время отладки было разработано для "небольших локальных изменений". Например, if(x>0)throw new uncaught() вместо if(x<0)throw new uncaught(). Ваше приложение остановилось на утверждении или точке останова и вот-вот рухнет, обработчик исключений с первым изменением отключится, и вот ваш шанс! Вы разматываете обработчик аварии, корректируете код, затем запускаете. Все в одном и том же методе, у которого была остановка, произошла в, как способ исправления "точно в срок".

Это одна из основных проблем, почему вы не можете добавлять методы, классы, модифицировать generics и т.д. во время сеанса E & C: т.е. редактирование текущей лямбды или текущего foreach может быть в порядке, но среда IDE не сможет переместить потоки и правильно выполнить новый код. Это немного похоже на то, почему вы иногда видите предупреждение "устаревшего кода", но с этими конструкциями кода его еще сложнее анализировать и, следовательно, не реализовывать. И, вероятно, никогда не попадет в список MS TO-DO:/

Текущий бум в .Net/С# - это не "живая разработка", а "notaliveyet development", сильно поддерживаемая модулярностью и модульным тестированием, где вы пытаетесь проверить большинство функций приложения off-line.. Но что сдвиг парадигмы и для небольших проектов или для локального развития рабочего стола иногда это просто перебор.