كيف يمكنني إضافة نقاط توقف التصحيح إلى الأسطر المعروضة في نافذة "البحث عن النتائج" في Visual Studio

StackOverflow https://stackoverflow.com/questions/73063

سؤال

في 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top