Visual Studio 加载符号

Posted

技术标签:

【中文标题】Visual Studio 加载符号【英文标题】:Visual Studio loading symbols 【发布时间】:2010-07-31 10:34:06 【问题描述】:

我现在在 ColdFusion 项目上工作了一段时间,Visual Studio 至少对我来说开始表现得很奇怪。

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

但它非常慢,我不知道为什么它开始做这一步。我可以做什么?

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

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

我在“模块”窗口中查看了哪些符号已加载,但它对我没有任何意义。有什么问题?

【问题讨论】:

我已经尝试了线程中的每个答案,但没有运气。 通常符号应该被缓存并且应该几乎没有时间来加载,唯一一次你会注意到符号加载速度很慢是如果符号是从非常非常慢的微软符号服务器加载的,例如(并不总是很慢但仍然很慢),因此尝试解决此问题的一种好方法是删除符号缓存,只需转到“调试”->“选项”->“调试”->“符号”并单击空符号缓存,如果这不起作用可能完全是另一个问题,希望这对看到问题已经 3 岁的人有所帮助(: 【参考方案1】:

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

【讨论】:

Visual Web Developer 2010 Express 用户可以按 CTRL+SHIFT+F9 并提示“您要删除所有断点吗?”会出现。您至少需要一个活动断点(不确定有问题的后台断点是否计数,因此设置一个)。谢谢!现在快多了…… 确实有效!极好的!是否有人已经向 Microsoft 报告了这个明显的错误? 当我尝试使用 CTRL + B 手动添加断点然后输入函数名称并忽略 IntilliSense 无法找到函数的警告时,发生了这种情况。 我在 VS2015 中遇到了同样的问题,但我找不到“删除所有断点”选项,知道如果它存在的话他们把它移到哪里了吗? Ctrl+Q(或点击右上角的“快速启动”框)并输入“delete”(或“breakpoints”或“delete all breakpoints”:))【参考方案2】:

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

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

确保选中此项。

【讨论】:

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

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

您可以观察输出窗口(视图、输出)以了解它通常在做什么。如果它真的很慢,那可能意味着它正在访问一个符号服务器,可能是微软的,以下载丢失的符号。对于每次启动时都找不到的每个文件,这需要三个 HTTP 命中 - 您有时可以在底部的状态栏中或例如在提琴手。您可以在调试时在 Debug、Windows、Modules 中查看哪些模块已加载符号。

符号意味着您可以在第三方和系统程序集中获得有用的堆栈跟踪信息。你自己的代码肯定需要它们,但我认为无论如何都会加载它们。您最好的选择是关闭该菜单中的任何非本地符号源,如果您正在为不需要调试的系统程序集加载大量符号,则可以暂时禁用加载这些符号以加快调试开始 -但加载它们通常很有用。

【讨论】:

在工具 -> 选项 -> 调试 -> 符号对话框中没有添加符号文件 (.pdb) 位置。我在下面的字段中指向了我的项目的调试目录,并选中了“仅当符号为 .... 时才搜索上面的目录”复选框。我不知道我应该如何设置这个对话框来关闭符号加载。 嗯,那我不知道。您需要为自己的代码加载符号来调试它,所以我认为您不想完全关闭它。我想然后我会查看“模块”窗口以查看哪些符号已加载,找出您实际需要的符号,然后可能从符号缓存中删除 .pdbs 以获得您不想要的符号? 勾选“使用微软符号服务器”,运行一次代码,所有符号都在缓存中。您现在可以取消选中该框以提高速度。 在工具 -> 选项 -> 调试 -> 符号中禁用 Microsoft 符号服务器为我解决了这个问题。在我等待 30 秒调试开始之前。现在只需一秒钟左右。【参考方案4】:

刚刚遇到这个问题。

我通过导航修复它:

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

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

例如Microsoft 符号服务器msdl.microsoft.com/download/symbols

【讨论】:

【参考方案5】:

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

【讨论】:

这也解决了我的问题(我猜赞成票的数量少是由于设置此变量的人数少......)谢谢! 这里也一样。我以为我可以从符号中取消选中它,但是不,必须删除/重命名环境变量。【参考方案6】:

您可以尝试以下Visual Studio debugging/loading very slow的回答:

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

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

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

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

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

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

    点击“确定”。

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

另见:Visual Studio 2015 RC1 Hangs in Debug mode while loading symbols

【讨论】:

【参考方案7】:

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

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

【讨论】:

感谢您提供这种疯狂的解决方法(带有“您要停止调试吗”消息)。我先尝试了其他答案,但到目前为止,只有红色的“X”和“你想要……”的技巧有帮助。谢谢你,我正在失去理智...... @que:呵呵,不客气!我偶然发现了它。似乎 VS 有一个单独的消息循环,它会进入该模式对话框,所以每当它无缘无故地出现缓慢时,弹出对话框有时会有所帮助:-)【参考方案8】:

刚遇到这个问题。 删除断点不起作用,或者至少不是靠它自己。 失败后我去了工具>选项>调试>符号和“空符号缓存”

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

现在似乎工作正常。因此,如果您尝试了列出的所有其他方法,但仍然没有什么不同,那么这些额外的信息可能会有所帮助...

【讨论】:

【参考方案9】:

在我的例子中,Visual Studio 正在寻找在我的机器上引用光驱的路径中的第 3 方 PDB。如果托盘中没有光盘,Windows 大约需要大约 30 次失败,这反过来又降低了 Visual Studio 的速度,因为它试图从该位置加载 PDB。更多详细信息可在我的完整答案中找到:https://***.com/a/17457581/85196

【讨论】:

【参考方案10】:

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

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

【讨论】:

【参考方案11】:

我的 2 美分,

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

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

Configuration Properties / General / Enable Managed Incremental Build to YES

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

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

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

编辑:最后一个可以解决问题

....

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

....

之后它就可以正常加载符号了。 我确定以上一项或多项对我有用(尽管我不确定是哪一种),只是想让其他人知道并尝试一下。..

和平

【讨论】:

【参考方案12】:

尝试右键单击其中一个断点,然后选择“位置”。然后选中复选框'允许源代码与原始版本不同'

【讨论】:

【参考方案13】:

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

    Tools -> Options -> Debugging -> Symbols 一种。启用“Microsoft 符号服务器”选项 湾。单击“清空符号缓存” C。将您的符号缓存设置为易于查找的位置,例如 C:\dbg_symbols%USERPROFILE%\dbg_symbols 重新运行调试后,让它从头到尾加载一次所有符号,或尽可能多地加载。

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

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

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

【讨论】:

【参考方案14】:

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

【讨论】:

【参考方案15】:

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

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

我之前只选择了本机代码。

【讨论】:

【参考方案16】:

转到项目属性->调试->取消选中启用本机代码调试

【讨论】:

【参考方案17】:

我遇到了类似的问题,Visual Studio 不断加载符号并卡住了。

原来我在调试选项中添加了一些“命令行参数”,其中一个参数无效(我应该传入一些值)。

删除多余的参数后,它又开始工作了。

【讨论】:

以上是关于Visual Studio 加载符号的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 加载符号

Visual Studio,已加载符号

Visual Studio 2008 未加载 MFC dll 符号

Visual Studio 没有为此文档加载任何符号

阻止 Visual Studio 尝试为特定 DLL 加载符号

在 Visual Studio 中卸载/重新加载符号/pdb