Любой способ кратко запустить поток пользовательского интерфейса, когда поток не пользовательский интерфейс остановлен в отладчике? - PullRequest
3 голосов
/ 04 ноября 2010

При отладке фоновых потоков с помощью Visual Studio 2010, есть ли хороший способ позволить другим потокам работать в течение нескольких сотен миллисекунд или около того, не продвигая поток, который находится в точке останова? Эквивалентно ли это вставке «Threading.Thread.Sleep (100)» непосредственно перед текущей строкой, установке там следующего оператора и выполнению нажатия кнопки возобновления (но без взлома отлаживаемого кода)? Мой код регистрации / отображения пакетов не так полезен, как мог бы быть, поскольку отладчик часто сталкивается с точкой останова между временем, когда мой код воздействовал на пакет, и временем, когда пользовательский интерфейс сумел отобразить его.

Я знаю, что можно зайти в окно Threads, заморозить поток, который достиг точки останова, нажать run, нажать pause, и разморозить поток, который достиг точки останова, но это действительно неуклюже. Есть ли более плавный способ делать вещи?

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

1 Ответ

3 голосов
/ 25 ноября 2010

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

Запись макроса должна быть простой (Tools, Macros), Record TemporaryMacro) в нужный момент времени, а затем сохраните его.

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

Или даже настроитьисходный код макроса, чтобы убедиться, что он выполняет ваши действия именно так, как нужно.

РЕДАКТИРОВАТЬ # 1: В качестве подсказки я хотел бы представить, что код выглядит примерно так (не проверено):

    Dim t As Thread
    t = DTE.Debugger.CurrentThread
    t.Freeze()
    DTE.Debugger.Go(False)
    Beep()
    Threading.Thread.Sleep(5000)
    Beep()
    DTE.Debugger.Break(True)
    DTE.Debugger.CurrentThread = t;
    t.Thaw()

РЕДАКТИРОВАНИЕ № 2: Возможно, вы захотите сослаться на это: EnvDTE.Debugger

Стандартный импорт для вашей справки:

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...