Visual Studio加载符号


166

我现在正在从事ColdFusion项目一段时间,而Visual Studio至少对于我来说开始表现得很奇怪。

我观察到,当我开始调试时,它构建了项目,启动了部署,部署完成,并且开始为我的项目加载符号。

但这很慢,我不知道为什么它开始执行此步骤。我该怎么办?

此符号加载步骤是否必要?如何禁用它?

在工具->选项->调试->符号对话框中,没有添加符号文件(.pdb)位置。我将项目的调试目录指向下面的字段,然后选中了“仅当符号为....时才搜索上面的目录”复选框。如何设置该对话框以关闭符号加载?

我在“模块”窗口中查看了加载了哪些符号,但对我来说什么也没说。问题是什么?

在此处输入图片说明


3
我已经尝试了线程中的每个答案,但没有运气。
2013年

3
通常,符号应该被缓存并且应该花费很少甚至没有时间来加载,您唯一会注意到符号加载很慢的情况是符号是从Microsoft符号服务器加载的,这是非常非常慢的,例如(不是总是很慢,但是没有慢较少),因此尝试并尝试解决此问题的一种好方法是删除符号缓存,只需转到“调试”->“选项”->“调试”->“符号”,然后单击空的符号缓存,如果这样做不起作用可能完全是另一个问题,希望这对某人有帮助,因为这个问题已经3岁了(:
丹尼尔

Answers:


266

调试->删除所有断点(http://darrinbishop.com/blog/2010/06/sharepoint-2010-hangs-after-visual-studio-2010-f5-debugging)之后,您可以再次使用它们,但是要这样做一旦。它也将删除某种“无效”的断点,然后加载符号将再次快速。我一直在追逐这个问题几天:(。


4
Visual Web Developer 2010 Express用户可以按CTRL + SHIFT + F9和提示“是否要删除所有断点?”。会出现。您至少需要一个活动断点(不确定是否有问题的背景断点算在内,所以设置一个)。谢谢!现在快多了……
Cymen 2011年

真是个明星!非常感谢。
user489998

确实这有效!难以置信!有没有人已经向微软报告了这个明显的错误?
real_yggdrasil 2012年

您的开始,这已经让我发疯了好几天了。太感谢了!
markpcasey 2012年

好吧,那是出乎意料的!确实有效。您保存了我的一天,非常非常感谢您!
tmatuschek 2012年

132

加载缓慢的另一个原因是,如果您在“调试”选项中禁用了“仅启用我的代码”。要启用此功能,请转到:

Tools -> Options -> Debugging -> General -> Enable Just My Code (Managed Only) 

确保已选中。


在某些Express版本的Visual Studio(虽然在Visual C#2010 Express中)的“选项”对话框中,“仅我的代码”选项不可用,但是可以通过其他方式进行更改:如何禁用“仅我的代码”在Visual Basic 2005 Express中?
彼得·莫滕森

3
这是为我解决的问题,而不是“删除所有断点”答案。
Mark Brittingham

这只是Visual Studio中最糟糕的选择。最好仅禁用符号加载,这样您仍然可以看到异常抛出和堆栈框架,而这些框架只是缺少符号。(只是一些难以理解的数字而不是名称)。当然,我通常会处理网站代码,因此在我下面有很多IIS可能会失败。通常,只需取消选择Microsoft(和所有远程)符号服务器作为数据源即可。
ebyrob

你救了我半天...!:D
Vaibhav Deshmukh

43

在工具,选项,调试,符号中进行配置。

您可以观看输出窗口(视图,输出)以查看其通常的功能。如果真的很慢,则可能意味着它正在使用符号服务器(可能是Microsoft的)来下载丢失的符号。对于每次启动都找不到的每个文件,这需要三个HTTP命中-有时您可以在底部的状态栏中或在Fiddler中看到它。调试时,您可以在“调试”,“ Windows”,“模块”中查看哪些模块已加载符号。

符号表示您将有用的堆栈跟踪信息获取到第三方和系统程序集中。您肯定需要使用它们来编写自己的代码,但是我认为无论如何它们都会被加载。最好的选择是关闭该菜单中的所有非本地符号源,并且,如果您要为不需要调试的系统程序集加载大量符号,则可以暂时禁用加载这些符号以加快调试速度-但加载它们通常很有用。


3
在工具->选项->调试->符号对话框中,没有添加符号文件(.pdb)位置。我将项目的调试目录指向下面的字段,然后选中了“仅当符号为....时才搜索上面的目录”复选框。我不知道如何设置此对话框以关闭符号加载。
阿纳尔迪诺

1
嗯,那我不知道。您需要为自己的代码加载符号以对其进行调试,所以我认为您不想完全将其关闭。我猜想我会在“模块”窗口中查看加载了哪些符号,弄清您实际需要的符号,然后也许从符号缓存中删除了不需要的.pdbs?
Rup

1
检查“使用Microsoft符号服务器”,运行一次代码,然后所有符号都在缓存中。现在,您可以取消选中该框以提高速度。
约翰·克特吉克

1
在工具->选项->调试->符号中禁用Microsoft Symbol Server对我来说已解决此问题。在等待30秒调试开始之前。现在只有一秒钟左右。
Mike Chamberlain 2013年

41

刚遇到这个问题。

我通过导航到以下方式修复了该问题:

工具 -> 选项 -> 调试 -> 符号

然后取消选中符号文件(.pdb)位置的所有非本地源

例如Microsoft Symbol Serversmsdl.microsoft.com/download/symbols


23

我遇到了类似的问题。在我的情况下,我已设置_NT_SYMBOL_PATH以便从Microsoft服务器下载以在WinDbg中使用,并且看起来像在设置时,Visual Studio将使用它,而无法忽略它。删除该环境变量解决了我的问题。


这也为我解决了问题(我猜支持投票的人数少是由于设置此变量的人数少...)谢谢!
Aasmund Eldhuset

同样在这里。我以为可以从符号中取消选中它,但是不可以,必须删除/重命名环境变量。
codekaizen

16

您可以尝试以下对Visual Studio调试/加载的回答非常慢

  1. 转到工具->选项->调试->常规

  2. 选中“启用我的代码”旁边的复选标记。

  3. 转到工具->选项->调试->符号

  4. 单击“ ...”按钮,然后在本地计算机上的某个位置创建/选择一个新文件夹来存储缓存的符号。我将其命名为“ Symbol caching”,并将其放在“文档”->“ Visual Studio 2012”中。

  5. 单击“加载所有符号”,然后等待从Microsoft的服务器下载符号,这可能需要一段时间。请注意,“加载所有符号”按钮仅在调试时可用。

  6. 取消选中“ Microsoft Symbol Servers”旁边的复选标记,以防止Visual Studio远程查询Microsoft服务器。

  7. 点击“确定”。

也尝试删除所有断点(Debug> Delete all the breakpoints),

另请参见Visual Studio 2015 RC1在加载符号时挂起在调试模式


6

对我来说,这似乎与断点有关,如公认的答案所示。但是,我发现了两种不涉及删除所有断点的解决方法:

  • 重新启动Visual Studio似乎可以暂时修复它。
  • 在调试时单击“ X”按钮以关闭Visual Studio会导致“是否要停止调试?” 弹出消息框;当此消息框打开时,符号以正常速度加载。加载所有符号后,您可以单击“否”以取消关闭。

3
感谢您的疯狂解决方法(带有“您想停止调试”消息)。我先尝试了其他答案,但到目前为止,只有红色的“ X”和“您想要...”的技巧有所帮助。谢谢你,我失去了理智...
食虫的

2
@que:嘿,不客气!我是偶然发现的。似乎VS在该模式对话框中进入了一个单独的消息循环,因此无论何时无故拖延,弹出对话框有时都会有所帮助:-)
Cameron

6

刚遇到这个问题。删除断点是行不通的,或者至少不是单靠它自己。失败之后,我进入了工具>选项>调试>符号和“空符号缓存”

然后清洗溶液并重建。

现在看来工作正常。因此,如果您尝试列出的所有其他方法,但仍然没有区别,这些额外的信息可能会有所帮助...


2

在我的情况下,Visual Studio在我的机器上引用光驱的路径中寻找第三方PDB。在托盘中没有光盘的情况下,Windows大约要花费30左右才能失败,这反过来又减慢了Visual Studio的速度,因为它试图从该位置加载PDB。在我的完整答案中可以找到更多详细信息:https : //stackoverflow.com/a/17457581/85196


2

我遇到了同样的问题,即使关闭了符号加载,Visual Studio中的模块加载也非常慢。

解决方案是关闭防病毒软件(在我的情况下为NOD32)或更高版本,向其添加例外,以便它忽略您的进程正在从中加载程序集的路径(在我的情况下为GAC文件夹和Temporary ASP .NET文件文件夹)。


2

我的2美分

尝试在x64发布模式(CPU采样)下获取(Visual Studio 2013)诊断报告时遇到了类似的问题,并且在加载所需dll文件的符号时,我的可执行文件的符号无法加载。

我没有在“符号”菜单中进行任何更改,而是在解决方案资源管理器中的可执行文件线程的“属性页”中进行了一些更改,即

配置属性/常规/将托管增量构建启用为是

配置属性/调试/合并环境为否

配置属性/ C / C ++ /将浏览信息启用为是(/ FR)

配置属性/链接器/启用到YES的增量链接(/ INCREMENTAL)

编辑:这最后一个技巧

....

配置属性/链接器/调试/将调试信息生成为是(/ DEBUG)

....

之后,它开始工作,并很好地加载了符号。我确信以上的一个或多个对我有用(尽管我不确定到底是哪一个),只是想让其他人知道并尝试一下。

和平



1

Visual Studio 2017调试符号“加速”选项,假设您尚未对选项自定义发疯:

  1. Tools -> Options -> Debugging -> Symbols
    一个。启用“ Microsoft Symbol Server”选项
    b。单击“空符号缓存”
    c。将符号缓存设置为易于查找的位置,例如C:\dbg_symbols%USERPROFILE%\dbg_symbols
  2. 重新运行Debug之后,让它从头到尾或尽可能合理地加载一次所有符号。

1A和2是最重要的步骤。1B和1C只是有用的更改,可以帮助您跟踪符号。

在您的应用程序至少加载了所有符号一次并且调试没有过早终止之后,这些符号应在下次调试运行时快速加载。

我注意到,如果取消调试运行,则必须重新加载这些符号,因为我猜想它们是在新引入并突然取消的情况下被“清除”的。我了解这种流程的核心原理,但是在这种情况下,似乎没有考虑周全。


0

在工具->选项->调试->常规中取消选中“为ASP.NET(Chrome和IE)启用JavaScript调试”,解决了我的情况,无法启动具有预设断点的VS2017调试器。


0

对我唯一有用的是更改代码类型。

在“ 附加到进程”窗口中,我将“ 附加到:”选择更改为“ 自动确定要调试的代码类型”,然后命中了断点。

我以前只选择了本代码。


0

我有一个类似的问题,Visual Studio不断加载符号并被卡住。

事实证明,我在Debug选项中添加了一些“命令行参数”,并且其中一个参数无效(我应该传递一些值)。 在此处输入图片说明

删除额外的参数后,它会再次开始工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.