繁体   English   中英

Visual Studio 2015 调试自定义控件

[英]Visual Studio 2015 Debugging Custom Control

我将自定义控件编译为 DLL,这些 DLL 是使用 Visual Studio 2012 开发的,并且部署到生产环境中没有任何问题。 这些控件在应用程序加载时使用反射作为“插件”加载。

当我使用 Visual Studio 2015 打开解决方案并尝试设置断点时,断点表明符号已加载,但在命中该代码段时它永远不会中断。

在 Visual Studio 2012 中,这些断点正确中断。 我尝试在 Visual Studio 2015 中重新编译 DLL,但它们仍然不会中断。 所有 PDB 也都带有 DLL。 关于是什么原因的任何想法?

我已经完成了 VS 中的所有调试设置,并且已经卸载/重新安装了 VS,但仍然存在相同的问题。

确保为 DLL 项目禁用优化,PDB 生成不是无,并且构建路径与其他项目使用 DLL 的位置相同。 很多时候只需清理整个解决方案,删除 Obj 文件夹 PDBs/dlls 并重建即可解决问题。

调试 DLL 的方法

本节中的每个项目都会创建一个 DLL。 您不能直接运行 DLL; 它必须由应用程序调用,通常是一个 EXE。 有关更多信息,请参阅创建和管理 Visual C++ 项目。 调用应用程序可能符合以下任一条件: 在包含类库的同一 Visual Studio 解决方案中的另一个项目中构建的应用程序。 已部署在测试或生产计算机上的现有应用程序。 位于 Web 上并通过 URL 访问。 包含嵌入 DLL 的网页的 Web 应用程序。


调试调用应用程序

要调试 DLL,首先要调试调用应用程序,通常是 EXE 或 Web 应用程序。 有几种方法可以调试它。 如果您有调用应用程序的项目,您可以打开该项目并从“调试”菜单开始执行。 有关更多信息,请参阅 b0fe0ce5-900e-421f-a4c6-aa44ddae453c。 如果调用应用程序是已经部署在测试或生产计算机上的现有程序并且已经在运行,您可以附加到它。 如果 DLL 是由 Internet Explorer 托管的控件或网页上的控件,请使用此方法。 有关更多信息,请参阅 636d0a52-4bfd-48d2-89ad-d7b9ca4dc4f4。 您可以从 DLL 项目中调试它。 有关更多信息,请参见如何:从 DLL 项目调试。 您可以从 Visual Studio 立即窗口调试它。 在这种情况下,立即窗口扮演应用程序的角色。 在开始调试调用应用程序之前,您通常需要在类库中设置断点。 有关更多信息,请参阅 fe4eedc1-71aa-4928-962f-0912c334d583。 当断点被击中时,您可以单步执行代码,观察每一行的动作,直到找出问题为止。 有关更多信息,请参阅 8791dac9-64d1-4bb9-b59e-8d59af1833f9。


网页上的控件

要调试网页控件,请创建一个嵌入它的 ASP.NET 页面(如果此类页面尚不存在)。 然后在网页代码和控件代码中放置断点。 然后从 Visual Studio 调用网页。 在开始调试调用应用程序之前,您通常需要在 DLL 中设置断点。 当断点被击中时,您可以单步执行代码,观察每一行的动作,直到找出问题为止。 有关更多信息,请参阅 FE4EEDC1-71AA-4928-962F-0912C334D583。


即时窗口

您可以在没有调用应用程序的情况下评估 DLL 中的函数或方法。 您进行设计时调试并使用“立即”窗口。 若要以这种方式调试,请在 DLL 项目打开时执行以下步骤: 打开调试器立即窗口。 要测试类 Class1 中名为 Test 的方法,请通过在“立即”窗口中键入以下 C# 代码来实例化 Class1 类型的对象。 此托管代码适用于 Visual Basic 和 C++,并进行了适当的语法更改:

Class1 obj = new Class1();

在 C# 中,所有名称都必须是完全限定的。 此外,任何方法或变量都必须在调试会话的当前范围和上下文中。 假设 Test 采用一个 int 参数,使用 Immediate 窗口评估 Test:

?obj.Test(10)

结果将打印在立即窗口中。 您可以通过在其中放置一个断点然后再次评估该函数来继续调试 Test:

?obj.Test(10);

断点将被击中,您将能够单步执行测试。 执行离开测试后,调试器将返回到设计模式。

有关更多信息,请访问调试 DLL 项目 希望这可以帮助...

1)尝试添加这个标签

< loadFromRemoteSources enabled="true" />

在您的配置文件中的 <runtime> 标签内。

2)清洁您的解决方案。

3)在解决方案>属性>项目依赖>从“DLLs”项目中选择复选框并将“exe”项目保留为启动项目。

4)构建解决方案,如果dll在不同的项目中,首先构建该项目,然后构建“.exe”。

5) 如果这不起作用,请尝试为您的解决方案设置不同的 .net 框架(以清理配置文件),然后设置原始 .net 框架,最后再次尝试步骤 1、2、3 和 4。

可能是符号没有被加载。

当您附加到您的程序并确定您的“插件”已加载时,选择调试 -> Windows -> 模块。

在列表中找到您的 dll 并查看“符号状态”列。 它可能会说“找不到或打开 PDB 文件”或“符号未加载”。

通常右键单击并选择“加载符号”可以解决此问题。

它会自动加载文件或要求您手动查找 pdb。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM