debugging Visual Studio 2015调试自定义控件

5tmbdcev  于 2023-02-09  发布在  其他
关注(0)|答案(4)|浏览(192)

我将自定义控件编译为使用Visual Studio 2012开发的DLL,并部署到生产环境中,没有任何问题。这些控件在应用程序加载时使用反射加载为“插件”。
当我使用Visual Studio 2015打开解决方案并尝试设置断点时,断点声明符号已加载,但在命中该代码节时不会中断。
在Visual Studio 2012中,这些断点正确中断。我尝试在Visual Studio 2015中重新编译DLL,但它们仍然不会中断。所有PDB也与DLL一起。有什么想法是什么原因导致的吗?
我已经检查了VS中的所有调试设置,并卸载/重新安装了VS,仍然有同样的问题。

i1icjdpr

i1icjdpr1#

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

5m1hhzi4

5m1hhzi42#

1)尝试添加此标签
< loadFromRemoteSources enabled="true" />
在你的< runtime >配置文件的标签里。
2)清洁溶液。
3)在Solution〉Properties〉Project Dependencies〉上选中“DLL”项目中的复选框,并将“exe”项目保留为启动项目。
4)生成解决方案,如果dll位于不同的项目中,则先生成该项目,然后再生成.exe项目。
5)如果这样做不起作用,请尝试为您的解决方案设置一个不同的.net framework(以清理配置文件),然后设置原始的.net framework,最后再次尝试步骤1、2、3和4。

yrefmtwq

yrefmtwq3#

可能是因为符号没有被加载。
当你连接到你的程序,你确定你的“插件”已经加载选择调试-〉窗口-〉模块。
在列表中找到您的dll并查看“符号状态”列。它可能显示“无法找到或打开PDB文件”或“符号未加载”。
通常右键单击并选择“加载符号”可以解决此问题。
它将自动加载文件或要求您手动查找pdb。

yv5phkfx

yv5phkfx4#

调试DLL的方法

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

调试调用应用程序

若要调试DLL,请首先调试调用应用程序,通常是EXE或Web应用程序。有几种调试方法。如果有调用应用程序的项目,则可以从“调试”菜单打开该项目并开始执行。有关详细信息,请参见b 0 fe 0 ce 5 - 900 e-421 f-a4 c6-aa 44 ddae 453 c。如果调用应用程序是已部署在测试或生产计算机上的现有程序,并且已在运行,则可以附加到该程序。如果DLL是Internet Explorer承载的控件或网页上的控件,请使用此方法。有关详细信息,请参见636 d 0a 52 - 4 bfd-48 d2 - 89 ad-d 7 b 9 ca 4dc 4f 4。可以从DLL项目中调试它。有关详细信息,请参见如何:从DLL项目进行调试。可以从Visual Studio“即时”窗口进行调试。在这种情况下,“即时”窗口扮演应用程序的角色。在开始调试调用应用程序之前,通常需要在类库中设置断点。有关详细信息,请参见fe 4 eedc 1 - 71 aa-4928- 962 f-0912 c334 d583。命中断点时,您可以逐步执行代码,观察每行的操作,直到您隔离问题。有关详细信息,请参见8791 dac 9 - 64 d1 - 4 bb 9-b59 e-8d 59 af 1833 f9。

网页上的控件

若要调试网页控件,请创建一个嵌入该控件的ASP.NET页(如果这样的页尚不存在)。然后在网页代码和控件代码中放置断点。然后从Visual Studio调用该网页。在开始调试调用应用程序之前,通常需要在DLL中设置断点。命中断点时,可以单步执行代码。观察每一行的操作,直到找出问题。有关详细信息,请参阅FE 4 EEDC 1 - 71 AA-4928- 962 F-0912 C334 D583。

即时窗口

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

Class1 obj = new Class1();

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

?obj.Test(10)

结果将打印在“即时”窗口中。您可以通过在Test中放置断点,然后再次计算该函数来继续调试Test:

?obj.Test(10);

断点将被命中,您将能够单步执行Test。执行离开Test后,调试器将返回设计模式。
有关更多信息,请访问调试DLL项目。

相关问题