在 Visual Studio 中,我可以在只有调试符号的代码中放置断点吗?

Posted

技术标签:

【中文标题】在 Visual Studio 中,我可以在只有调试符号的代码中放置断点吗?【英文标题】:In Visual Studio, can I put breakpoints in code for which I only have debugging symbols? 【发布时间】:2010-12-29 19:24:42 【问题描述】:

由于我无法访问我正在使用的库的完整源代码,但我有 pdb 文件,是否可以在“调试源代码”中设置断点?

如果是这样,我该怎么做?

【问题讨论】:

【参考方案1】:

是的,这是可能的,您不需要源代码。 调试 > 新断点 > 在函数处中断。将位置设置为函数的名称。例如:“Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly”。关闭“使用 Intellisense”复选框,您将没有任何复选框。如果您不知道它是用什么写的,语言是一种猜测,如果您不确定,请选择“未知”。

您需要密切关注 Debug + Windows + Breakpoints 窗口,以验证调试器是否可以解析断点。在程序集被加载并且方法被 JIT 编译之前,它将无法实现。

这当然不是最好的调试体验。一旦断点命中,除了 JIT 编译器生成的机器代码外,您什么也看不到。以及调用堆栈窗口,顺便说一句,您查看方法名称的终极资源。

【讨论】:

那么你将如何设置中断,例如System.DateTime.IsLeapYear()?试过这个,但它没有打破。我在“工具”>“调试”>“符号”中定义了“Microsoft 符号服务器”,但“断点”窗口显示“未找到符号”。 我尝试时效果很好。不要输入 () 设置了“只是我的代码”(再次感叹),因此没有加载符号。只需要加载源代码。我知道约翰罗宾斯有一个工具。 VS 几乎总是超出我的预期。为外部函数设置断点并查看 CallStack 是解决复杂问题所需要的。感谢您的回答。 对我来说,最好也包含 dll,例如 Microsoft.AspNetCore.Authentication.Certificate.dll!Microsoft.AspNetCore.Authentication.Certificate.CertificateAuthenticationHandler.HandleAuthenticateAsync()。您可以从调用堆栈中复制整个字符串。

以上是关于在 Visual Studio 中,我可以在只有调试符号的代码中放置断点吗?的主要内容,如果未能解决你的问题,请参考以下文章

Visual studio 2010解决方案资源管理器中没有“解决方案(*个项目)”怎么调出来

visual studio的unicode怎么这么恶心啊,我想砸电脑了!

只有在 Visual Studio 之外运行 EXE 时才会出现发布错误

如何在 Visual Studio C++ 中编译只有“makefile”而没有解决方案文件的开源框架?

在 javascript 中禁用 Visual Studio 自动完成注释

Visual Studio 2012 的 Windows 用户模式调试器传输