Я думаю, что существует только один ответ на Ваш вопрос, который Вы обесценили как являющийся 'слишком много работы'. Однако я полагаю, что это вызвано тем, что Вы идете об этом неправильным путем. Позвольте мне представить шаги для добавления условной точки прерывания на идентификаторе Потока, которые чрезвычайно легки, но не очевидны, пока Вы не знаете их.
Остановка отладчик в точке, где Вы находитесь в корректном потоке, Вы хотите продолжить отлаживать в (, который я предположил бы, обычно первый поток, который добирается там ).
Входят $TID
в окно часов.
Добавляют точку останова с условием $TID == <
значение $TID от Примера Окна >
,
Часов : $TID == 0x000016a0
Продолжают Выполнение.
$TID
волшебная переменная для компиляторов Microsoft (так как, по крайней мере, Visual Studio 2003), который имеет значение идентификатора текущего потока. Это делает его намного легче, чем рассмотрение (FS+0x18) [0x24]. =D
Однако можно получить то же поведение как точки останова отладчика С одним выстрелом с некоторыми простыми макросами. Когда Вы переступаете, отладчик, негласно, устанавливает точку останова, работает к той точке останова и затем удаляет ее. Ключ к последовательному пользовательскому интерфейсу удаляет те точки останова, если КАКОЙ-ЛИБО точка останова поражена.
следующие два макросов обеспечивают , Переступают и Выполнение К Курсору для текущего потока. Это выполняется таким же образом как отладчик с точками останова, удаляемыми после выполнения, независимо от которого поражена точка останова.
Вы захотите присвоить сочетание клавиш для выполнения их.
ПРИМЕЧАНИЕ : Один протест - Эти Переступает , макрос только работает правильно, если курсор находится на строке, Вы хотите переступить. Это вызвано тем, что это определяет текущее местоположение позицией курсора, и просто добавляет ту к номеру строки. Можно быть в состоянии заменить вычисление местоположения информацией о текущей точке выполнения, хотя я был неспособен определить местоположение той информации от Макро-IDE.
Здесь они и поиск ошибки удачи!!
Для использования их макросы в Visual Studio:
1. Откройте Macro IDE (из Меню, выберите: Инструменты-> Макросы-> Макро-IDE... )
2. Добавьте новый Файл кода (из Меню: выберите: Проект-> Добавляют Новый Объект... , выберите Code File и нажмите Add)
3. Вставка в этом коде.
4. Сохраните файл.Для добавления сочетаний клавиш для выполнения их макросы в Visual Studio:
1. Откройте Options (из Меню, выберите: Инструменты-> Опции )
2. Расширьтесь до [1 131] Среда-> Клавиатура
3. В [1 132] Выставочные команды, содержащие: , Макросы типа . для наблюдения всех макросов.
4. Выберите макрос, затем нажмите в [1 134] сочетания клавиш Нажатия:
5. Введите комбинацию, которую Вы хотите использовать (, клавиша Backspace удаляет введенные комбинации )
6. нажмите Assign для установки ярлыка для выполнения выбранного макроса.
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics
Public Module DebugHelperFunctions
Sub RunToCursorInMyThread()
Dim textSelection As EnvDTE.TextSelection
Dim myThread As EnvDTE.Thread
Dim bp As EnvDTE.Breakpoint
Dim bps As EnvDTE.Breakpoints
' For Breakpoints.Add()
Dim FileName As String
Dim LineNumber As Integer
Dim ThreadID As String
' Get local references for ease of use
myThread = DTE.Debugger.CurrentThread
textSelection = DTE.ActiveDocument.Selection
LineNumber = textSelection.ActivePoint.Line
FileName = textSelection.DTE.ActiveDocument.FullName
ThreadID = myThread.ID
' Add a "One-Shot" Breakpoint in current file on current line for current thread
bps = DTE.Debugger.Breakpoints.Add("", FileName, LineNumber, 1, "$TID == " & ThreadID)
' Run to the next stop
DTE.Debugger.Go(True)
' Remove our "One-Shot" Breakpoint
For Each bp In bps
bp.Delete()
Next
End Sub
Sub StepOverInMyThread()
Dim textSelection As EnvDTE.TextSelection
Dim myThread As EnvDTE.Thread
Dim bp As EnvDTE.Breakpoint
Dim bps As EnvDTE.Breakpoints
' For Breakpoints.Add()
Dim FileName As String
Dim LineNumber As Integer
Dim ThreadID As String
' Get local references for ease of use
myThread = DTE.Debugger.CurrentThread
textSelection = DTE.ActiveDocument.Selection
LineNumber = textSelection.ActivePoint.Line
FileName = textSelection.DTE.ActiveDocument.FullName
ThreadID = myThread.ID
LineNumber = LineNumber + 1
' Add a "One-Shot" Breakpoint in current file on current line for current thread
bps = DTE.Debugger.Breakpoints.Add("", FileName, LineNumber, 1, "$TID == " & ThreadID)
' Run to the next stop
DTE.Debugger.Go(True)
' Remove our "One-Shot" Breakpoint
For Each bp In bps
bp.Delete()
Next
End Sub
End Module
Правовая оговорка : Я записал им макросы в [1 137] Visual Studio 2005 . Можно, вероятно, использовать их прекрасный в [1 138] Visual Studio 2008 . Они могут потребовать модификации для [1 139] Visual Studio 2003 и прежде.
Можно заморозить различный поток или переключиться на другой поток с помощью окна отладки Потоков ( Ctrl + Высокий звук + H ).