Visual Studio 加载符号

187
我已经在做 ColdFusion 项目一段时间了,但是 Visual Studio 对我来说开始表现得很奇怪。
我观察到当我开始调试时,它会构建项目,启动部署,并且完成部署后开始加载我的项目符号。
但这非常缓慢,我不知道为什么它开始执行此步骤。我可能做了什么?
这个符号加载步骤是必要的吗?我如何禁用它?
在“工具”->“选项”->“调试”->“符号”对话框中没有添加符号文件(.pdb)位置。我在下面的字段中指向了我的项目的调试目录,并勾选了“仅在符号被...时搜索上面的目录”复选框。我应该如何设置此对话框以关闭符号加载?
我查看了模块窗口中加载的符号,但对我来说没有任何意义。问题出在哪里?

enter image description here


3
我尝试了帖子中的每个答案,但都没有成功。 - Johan Larsson
4
通常符号应该被缓存,并且加载时间很短,唯一会注意到符号加载变慢的情况是当符号从微软符号服务器加载时,这非常非常慢(不总是非常慢,但仍然很慢)。因此,尝试解决此问题的一个好方法是删除符号缓存,只需转到“调试”->“选项”->“调试”->“符号”,然后单击空的符号缓存。如果这不起作用,则可能是完全另一个问题,希望这对某人有所裨益,因为这个问题已经存在3年了(: - daniel
请注意:如果任何人在调试符号加载方面继续遇到问题,请尝试删除您的.vs文件夹。这对我很有效。 - Robert
18个回答

285

5
Visual Web Developer 2010 Express用户可以按下CTRL+SHIFT+F9键,会出现一个提示框"是否删除所有断点?"。您需要至少设置一个活动断点(不确定是否包括有问题的后台断点,所以请设置至少一个)。谢谢!现在速度快多了... - Cymen
真的可以工作!太棒了!有人已经向微软报告了这个明显的错误吗? - real_yggdrasil
当我尝试使用 CTRL + B 手动添加断点并忽略 IntilliSense 无法找到该函数的警告时,就发生了这种情况。 - Sergey
哇 - 在看了到处都是这些晦涩、复杂的建议/解决方案之后(通常会有副作用),这就是简单而有效的答案。谢谢! - Manachi
看起来你也在VS 2017中为我解决了这个问题。点赞(如果它确实是解决方法,因为我已经尝试了很多)。 - Stefan
显示剩余4条评论

158

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

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

请确认已勾选此项。


“Just My Code”选项在某些Visual Studio Express版本的选项对话框中不可用(尽管在Visual C# 2010 Express中可用),但可以通过其他方式进行更改:*如何在Visual Basic 2005 Express中禁用“Just My Code”?*。 - Peter Mortensen
3
这是对我有用的那个...而不是“删除所有断点”的答案。 - Mark Brittingham
这是Visual Studio中最糟糕的选项之一。最好的方法是禁用符号加载,这样您仍然可以看到缺少符号的异常抛出和堆栈帧(只是一些难以阅读的数字而不是名称)。当然,我通常处理网站代码,所以在我的下面有很多IIS可能会失败。通常,只需取消选择Microsoft(和所有远程)符号服务器作为数据源即可解决问题。 - ebyrob

53

我刚遇到了这个问题。

我通过以下步骤解决了它:

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

然后取消所有非本地源的符号文件 (.pdb) 位置的勾选,例如Microsoft 符号服务器msdl.microsoft.com/download/symbols


48

在“工具”、“选项”、“调试”、“符号”中进行配置。

通常,您可以查看输出窗口(查看,“输出”)以查看它的执行情况。如果速度真的很慢,那可能意味着它正在访问符号服务器,可能是微软的,下载缺失的符号。每次启动时,对于每个找不到的文件,需要三次HTTP请求-您有时可以在状态栏底部或例如Fiddler中看到这一点。在调试过程中,您可以在“调试”、“窗口”、“模块”中查看已加载符号的模块。

符号表示您可以获得有用的堆栈跟踪信息,用于第三方和系统程序集。对于自己的代码,您绝对需要这些符号,但我认为这些符号会被加载无论如何。您最好在菜单中关闭任何非本地符号源,如果您需要加载大量不需要调试的系统程序集的符号,则可以暂时禁用这些加载以加快调试启动速度-但它们通常很有用。


3
在“工具”->“选项”->“调试”->“符号”对话框中,没有添加符号文件(.pdb)的位置。我在下面的字段中指向了我的项目的调试目录,并且勾选了“仅在符号在上述目录中时搜索...”复选框。我不知道该如何设置此对话框以关闭符号加载。 - arnoldino
1
嗯,那我就不知道了。你需要加载符号来调试自己的代码,所以我认为你不想完全关闭它。我猜我会看一下模块窗口,看看哪些已经加载了符号,找出你实际需要的那些,然后也许删除你不想要的那些.pdb文件从你的符号缓存中? - Rup
1
勾选“使用Microsoft符号服务器”,运行代码一次,然后所有符号都会被缓存。现在,您可以取消勾选该框以提高速度。 - john k
1
在“工具”→“选项”→“调试”→“符号”中禁用Microsoft符号服务器,这对我有所帮助。在此之前,我需要等待30秒才能开始调试。现在只需一秒钟左右。 - Mike Chamberlain

24
您可以尝试以下方法解决Visual Studio调试或加载速度过慢的问题:
  1. 进入“工具”->“选项”->“调试”->“常规”

  2. 勾选“启用只跟踪我的代码”旁边的复选框。

  3. 进入“工具”->“选项”->“调试”->“符号”

  4. 点击“…”按钮并创建/选择一个本地计算机上的新文件夹以存储缓存的符号。我将其命名为“符号缓存”并放在文档->Visual Studio 2012中。

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

  6. 取消选中“Microsoft符号服务器”旁边的复选框,以防止Visual Studio远程查询Microsoft服务器。

  7. 点击“确定”。

同时,您还可以尝试删除所有断点(调试- >删除所有断点)。

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


对我来说,只需要勾选“启用仅调试我的代码”。 - tedebus
对我来说,只需要勾选“启用仅限我的代码”即可。 - undefined

23

我遇到了类似的问题。在我的情况下,我已经将_NT_SYMBOL_PATH设置为从Microsoft服务器下载以在WinDbg中使用,看起来当设置后,Visual Studio将使用它而没有任何忽略的方法。删除该环境变量解决了我的问题。


这对我也解决了问题(我猜测点赞数少是因为设置这个变量的人很少...)谢谢! - Aasmund Eldhuset
一样的情况。我以为我可以从符号中取消勾选它,但是不行,环境变量必须被删除/重命名。 - codekaizen

6

刚遇到了这个问题。 仅仅删除断点并不能解决它。 在尝试失败后,我去了工具 > 选项 > 调试 > 符号,然后“清空符号缓存”。

然后清理解决方案并重新构建。

现在看起来一切正常。所以如果你尝试了所有列出的其他方法,但仍然没有任何改变,这些额外的信息可能会有所帮助...


6

对我来说,这似乎与断点有关,正如被接受的答案所示。然而,我发现了两种方法可以解决问题,而不必删除所有断点:

  • 重新启动 Visual Studio 似乎可以暂时解决这个问题。
  • 在调试时,点击“X”按钮关闭 Visual Studio,会弹出“是否停止调试?”消息框;当该消息框弹出时,符号将以普通速度加载。一旦所有符号都加载完毕,您可以单击“否”取消关闭。

3
谢谢你提供这个“疯狂的解决方案”(带有“是否停止调试”的消息)。我先尝试了其他答案,但到目前为止只有使用红色“X”和“是否要...”的技巧才有帮助。非常感谢,否则我就快要失去理智了... - pestophagous
2
@que:嘿,不用谢!我是偶然发现的。似乎VS有一个单独的消息循环,用于处理模态对话框,所以当它在没有原因的情况下变得迟缓时,有时弹出对话框可以帮助解决问题 :-) - Cameron

3

Visual Studio 2017 调试符号“加速”选项,假设您还没有对选项进行过多的自定义:

  1. 工具 -> 选项 -> 调试 -> 符号
    a. 启用“Microsoft 符号服务器”选项
    b. 单击“清空符号缓存”
    c. 将符号缓存设置为易于查找的位置,例如 C:\dbg_symbols%USERPROFILE%\dbg_symbols
  2. 重新运行调试后,让它一次性加载所有符号,或者尽可能多地加载。

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

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

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


2

在我的情况下,Visual Studio 在路径中寻找第三方 PDBs,而这些路径在我的机器上引用了光驱。如果托盘中没有光盘,Windows 大约需要 30 秒才会失败,这反过来会减慢 Visual Studio 尝试从该位置加载 PDBs 的速度。更多详细信息请参见我的完整答案:https://dev59.com/ZGYr5IYBdhLWcg3wRoOW#17457581


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接