كيف يمكنني إضافة نقاط توقف التصحيح إلى الأسطر المعروضة في نافذة "البحث عن النتائج" في Visual Studio
-
09-06-2019 - |
سؤال
في Visual Studio 2005-2015، من الممكن العثور على كافة الأسطر التي تحتوي على مراجع معينة وعرضها في نافذة "البحث عن النتائج".
الآن بعد أن تم عرض خطوط النتائج هذه، هل هناك أي اختصار للوحة المفاتيح يسمح بإضافة نقاط توقف التصحيح إليها جميعًا؟
المحلول
لا تعمل هذه الإجابة مع Visual Studio 2015 أو الإصدارات الأحدث.يمكن العثور على إجابة أحدث هنا.
يمكنك القيام بذلك بسهولة إلى حد ما باستخدام ماكرو Visual Studio.داخل Visual Studio، اضغط على Alt-F11 لفتح Macro IDE وإضافة وحدة نمطية جديدة عن طريق النقر بزر الماوس الأيمن على MyMacros وتحديد Add|Add Module...
الصق ما يلي في المحرر المصدر:
Imports System
Imports System.IO
Imports System.Text.RegularExpressions
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics
Public Module CustomMacros
Sub BreakpointFindResults()
Dim findResultsWindow As Window = DTE.Windows.Item(Constants.vsWindowKindFindResults1)
Dim selection As TextSelection
selection = findResultsWindow.Selection
selection.SelectAll()
Dim findResultsReader As New StringReader(selection.Text)
Dim findResult As String = findResultsReader.ReadLine()
Dim findResultRegex As New Regex("(?<Path>.*?)\((?<LineNumber>\d+)\):")
While Not findResult Is Nothing
Dim findResultMatch As Match = findResultRegex.Match(findResult)
If findResultMatch.Success Then
Dim path As String = findResultMatch.Groups.Item("Path").Value
Dim lineNumber As Integer = Integer.Parse(findResultMatch.Groups.Item("LineNumber").Value)
Try
DTE.Debugger.Breakpoints.Add("", path, lineNumber)
Catch ex As Exception
' breakpoints can't be added everywhere
End Try
End If
findResult = findResultsReader.ReadLine()
End While
End Sub
End Module
يستخدم هذا المثال النتائج الموجودة في نافذة "البحث عن النتائج 1"؛قد ترغب في إنشاء اختصار فردي لكل نافذة نتيجة.
يمكنك إنشاء اختصار لوحة المفاتيح بالانتقال إلى الأدوات|الخيارات...والاختيار لوحة المفاتيح تحت بيئة القسم في التنقل على اليسار.حدد الماكرو الخاص بك وقم بتعيين أي اختصار تريده.
يمكنك أيضًا إضافة الماكرو الخاص بك إلى القائمة أو شريط الأدوات بالانتقال إلى الأدوات|تخصيص...واختيار وحدات الماكرو القسم في التنقل على اليسار.بمجرد تحديد موقع الماكرو الخاص بك في القائمة، يمكنك سحبه إلى أي قائمة أو شريط أدوات، حيث يمكن تخصيص النص أو الرمز الخاص به حسب ما تريد.
نصائح أخرى
إذا كان بإمكانك البحث عن الكلمة بالضبط، فيمكنك استخدام زوج من اختصارات لوحة المفاتيح للقيام بذلك بسرعة.
الأدوات -> الخيارات -> البيئة -> لوحة المفاتيح
- تحرير.GoToFindResults1NextLocation
- EditorContextMenus.CodeWindow.Breakpoint.InsertBreakpoint
قم بتعيينها إلى Control+Alt+F11 وF10 ويمكنك الاطلاع على جميع النتائج بسرعة كبيرة.لم أجد اختصارًا للانتقال إلى المرجع التالي.
كنت بحاجة إلى شيء مشابه لتعطيل جميع نقاط التوقف ووضع نقطة توقف على كل "Catch ex as Exception".ومع ذلك، قمت بتوسيع هذا قليلاً بحيث سيتم وضع نقطة توقف عند كل ظهور للسلسلة التي حددتها.كل ما عليك فعله بهذا هو تحديد السلسلة التي تريد وضع نقطة توقف عليها وتشغيل الماكرو.
Sub BreakPointAtString()
Try
DTE.ExecuteCommand("Debug.DisableAllBreakpoints")
Catch ex As Exception
End Try
Dim tsSelection As String = DTE.ActiveDocument.Selection.text
DTE.ActiveDocument.Selection.selectall()
Dim AllText As String = DTE.ActiveDocument.Selection.Text
Dim findResultsReader As New StringReader(AllText)
Dim findResult As String = findResultsReader.ReadLine()
Dim lineNum As Integer = 1
Do Until findResultsReader.Peek = -1
lineNum += 1
findResult = findResultsReader.ReadLine()
If Trim(findResult) = Trim(tsSelection) Then
DTE.ActiveDocument.Selection.GotoLine(lineNum)
DTE.ExecuteCommand("Debug.ToggleBreakpoint")
End If
Loop
End Sub
آمل أن يعمل لك :)
بول، شكرًا جزيلاً، ولكن لدي الخطأ التالي (مربع الرسالة)، ربما أحتاج إلى إعادة تشغيل جهاز الكمبيوتر الخاص بي:
Error
---------------------------
Error HRESULT E_FAIL has been returned from a call to a COM component.
---------------------------
OK
---------------------------
أود أن أقترح الحل التالي وهو بسيط للغاية ولكنه يناسبني
Sub BreakPointsFromSearch()
Dim n As Integer = InputBox("Enter the number of search results")
For i = 1 To n
DTE.ExecuteCommand("Edit.GoToNextLocation")
DTE.ExecuteCommand("Debug.ToggleBreakpoint")
Next
End Sub