Monday, April 25, 2011

Hotkeys for Previous and Next call stack frames in Visual Studio

Visual Studio gives many navigation hotkeys: F8 for next item in current panel (search results, errors ...), Control+K,N for bookmarks, Alt- for going back and more.

There is one hotkey that I can't find, and I can't even find the menu-command for it, so I can't create the hotkey myself.

I don't know if such exist:

Previous and Next call-stack frame. I try not using the mouse when programming, but when I need to go back the stack, I must use it to double click the previous frame.

Anyone? How about a macro that does it?

Thanks.

From stackoverflow
  • Look in Tools->Options->Environment->Keyboard. Enter "stack" or "frame" and related menus will appear. It seems that there's no next and previous call-stack frame.

    Onorio Catenacci : @Adrian Aisemberg, I think he is answering your question. I think he's saying that there is no such shortcut key.
  • I don't think theres an explict next-frame / prev-frame key binding but heres what I do.

    CTRL-ALT-C is already bound to "Debug.CallStack" This will focus you in the Call Stack Tool Window

    Once focused in the Callstack window... Up & Down arrows will move you through the call stack frames

    I've then bound

    CTRL-C, CTRL-S to "DebuggerContextMenus.CallStackWindow.SwitchToFrame" and CTRL-C, CTRL-C to "DebuggerContextMenus.CallStackWindow.SwitchToCode"

    both of which will take you back into the code window at the particular frame.

    Hope that helps.

  • I've wrote 2 macros for these purposes: PreviousStackFrame and NextStackFrame and assigned shortcuts to

    Function StackFrameIndex(ByRef aFrames As EnvDTE.StackFrames, ByRef aFrame As EnvDTE.StackFrame) As Long
        For StackFrameIndex = 1 To aFrames.Count
            If aFrames.Item(StackFrameIndex) Is aFrame Then Exit Function
        Next
        StackFrameIndex = -1
    End Function
    
    Sub NavigateStack(ByVal aShift As Long)
        If DTE.Debugger.CurrentProgram Is Nothing Then
            DTE.StatusBar.Text = "No program is currently being debugged."
            Exit Sub
        End If
    
        Dim ind As Long = StackFrameIndex(DTE.Debugger.CurrentThread.StackFrames, DTE.Debugger.CurrentStackFrame)
        If ind = -1 Then
            DTE.StatusBar.Text = "Stack navigation failed"
            Exit Sub
        End If
    
        ind = ind + aShift
        If ind <= 0 Or ind > DTE.Debugger.CurrentThread.StackFrames.Count Then
            DTE.StatusBar.Text = "Stack frame index is out of range"
            Exit Sub
        End If
    
        DTE.Debugger.CurrentStackFrame = DTE.Debugger.CurrentThread.StackFrames.Item(ind)
        DTE.StatusBar.Text = "Stack frame index: " & ind & " of " & DTE.Debugger.CurrentThread.StackFrames.Count
    End Sub
    
    Sub PreviousStackFrame()
        NavigateStack(1)
    End Sub
    
    Sub NextStackFrame()
        NavigateStack(-1)
    End Sub
    
    Antoine Aubry : This macro works great! Thanks a lot :D

0 comments:

Post a Comment

Note: Only a member of this blog may post a comment.