我的主要解决方案是使用我自己编写的实用程序类库中的代码,但它是另一个解决方案的一部分。我该如何在引用的DLL文件中设置断点?
我的主要解决方案是使用我自己编写的实用程序类库中的代码,但它是另一个解决方案的一部分。我该如何在引用的DLL文件中设置断点?
点击“调试(Debug)”,选择“新建断点(New Breakpoint)”,然后选择“在函数处中断(Break at Function)”,最后输入函数的全名。
在Visual Studio中,使用菜单
文件 > 打开 > 文件…
手动打开包含所需方法的引用DLL的源文件,然后通过单击代码编辑器中的左边框来设置断点。这样可以在任何代码行上中断,而不仅仅是在函数调用处。Visual Studio显示断点处于已禁用状态,因为它认为该代码无法到达。只需忽略它; 一旦代码运行并加载了DLL,断点将变为活动状态。
注意:为使此功能正常工作,您必须引用程序集的Debug版本。
我知道这是一个老问题,但可能对很多人有帮助。
为了使调试器正常工作,您需要加载调试符号数据库,一个与要调试的程序集同名的 .pdb 文件。如果它是您创建的解决方案的一部分,您可以从其他解决方案的 bin 文件夹中复制粘贴它。然后添加断点,指定您想要调试的方法的完整路径,以及它所在的程序集的名称。例如:"MyNamespace.MayClass.MyMethod, MyAssemblyName"
如果您不拥有代码,有两个选项,都涉及反汇编器。我使用 dotPeek 进行此操作,因为它真的非常好用。
选项 1:使用 dotPeek 打开程序集并为其创建单个 .pdb 文件,然后将其复制到您的 .bin 文件夹并按照上述步骤进行操作。https://www.jetbrains.com/decompiler/help/Generating_PDB_Files.html
选项2:使用dotPeek符号服务器和PDB生成。 https://www.jetbrains.com/decompiler/help/Symbol_Server_and_PDB_Generation.html 之后按照上面的说明附加调试器实例即可。Debug
New Breakpoint
Function Breakpoint
,或直接按下键盘上的 Ctrl+K, B
命名空间.类名.函数名
例如,假设您有这样一段代码,我想在函数 D
开始处设置断点:
namespace A.B{
public class C{
public void D(){
int x= 10;
}
}
}
A::B::C::D
。这不是我的答案,而是Frep D-Oronge在上面的评论中提出的建议。它很容易操作,没有任何问题:
“我发现很容易 - 只需同时运行两个Studio实例。在“主”实例上按Ctrl-F5以启动不带调试器的程序,然后使用正在编辑库项目的Studio实例附加到该进程”
所有功劳归于他。
假设您想要调试位于NuGet包中的SomeMethod
。
在这种情况下,更简单的方法是:
MyClass.SomeMethod
MyClass.SomeMethod
Namespace.ClassName.ClassName
。 - SLaksNs.ClassName.ctor
。 - SLaks