8

一般来说,您对此有何建议?目前,我需要将近 10 分钟才能附加到托管 SharePoint 2007 的本地运行的 IIS 进程。

4

3 回答 3

6

确保您的符号路径包含本地缓存目录,这样它就不会在您每次附加时从 Microsoft 的公共符号服务器下载符号。

此外,我还没有在 Visual Studio 中尝试过,但您也可以设置一个排除列表来识别您没有符号的模块。

于 2009-10-16T17:53:29.920 回答
4

在 Visual Studio 2010 中,我通过转到工具 -> 选项 -> 调试 -> 符号,选择仅指定的模块并单击确定,将我对 w3wp 进程的附加时间减少到几乎即时。这使得 Visual Studio 为我们团队编写的六个程序集加载符号,并在此过程中跳过为其他 146 个模块加载符号。

请注意,我让 Microsoft 符号服务器检查了我的符号文件 (.pdb) 位置,并将我的符号缓存到 c:\debugSymbols。

于 2011-11-11T16:03:41.457 回答
1

您还可以从windows 调试工具页面下载当前平台的符号。将它们安装到本地缓存符号目录(例如 c:\windows\symbols)

您还可以按照此处所述关闭符号的自动加载。

或者更快的方法,尝试在调试器外部运行(使用 Ctrl-F5),然后附加到进程。我有一个 Visual Studio 宏,我绑定到 Ctrl-Shift-A,我可以随时将其附加到我的进程,它映射到这个:

   Function AttachToProcess(ByVal procname As String, ByVal quiet As Boolean) As Boolean
    Dim attached As Boolean = False
    Dim proc2 As EnvDTE80.Process2

    ' Attaching natively, from http://blogs.msdn.com/jimgries/archive/2005/11/30/498264.aspx'
    Dim dbg2 As EnvDTE80.Debugger2 = DTE.Debugger
    Dim trans As EnvDTE80.Transport = dbg2.Transports.Item("Default")
    Dim dbgeng(1) As EnvDTE80.Engine
    dbgeng(0) = trans.Engines.Item("Native")

    For Each proc2 In DTE.Debugger.LocalProcesses
        If (proc2.Name.Contains(procname)) Then
            proc2.Attach2(dbgeng)
            attached = True
            Exit For
        End If
    Next

    If (attached = False And quiet = False) Then
        MsgBox(procname + " is not running")
    End If
    Return attached
End Function

Sub AttachToMyProcess()
    AttachToProcess("MyProcess.exe", True)
End Sub
于 2009-10-20T21:26:02.343 回答