如何调试类库,从外部应用程序叫什么名字?(How to debug class library th

2019-07-04 09:44发布

有执行C#脚本,并能够与DLL文件(我的类库)工作的外部工作流程。

是否有可能调试安装到我的类库项目,所以断点会打一次,这WF会打电话吗?

谢谢

Answer 1:

是的,你可以使用Visual Studio这样做。 你有两个选择:

配置您的工程启动外部程序

  1. 打开DLL项目。

  2. 在该项目的性质,进入调试选项卡。

  3. 选择启动外部程序并给予外部程序将调用你的DLL,你可能需要提供的任何命令行参数沿的路径,工作目录,如果这是相关的。

  4. 保存该项目。

  5. 要将其设置在您的代码中设置断点。

  6. 按F5开始调试。 (此时,您的断点会说,他们将不会被击中,因为这些符号不会被加载。不要担心,就目前而言)。

  7. 做任何你做,使外部应用程序到您的书架和运行代码。

Visual Studio将检测模块加载,加载符号,并停止在断点处。

附加到现有的流程

如果您无法启动进程,而是要连接到一个已经运行的过程中,你也可以这样做:

(附注:如果你正在使用Visual Studio的“快车”版,我不认为它有这个功能,但我不能确定有关这是很容易分辨:你要么有菜单项上低于或不步骤4提及。)

  1. 确保正在运行的进程。

  2. 打开DLL项目。

  3. 设置断点,等等。

  4. Debug菜单,选择附加处理...

  5. 在出现的对话框中,找到进程列表中,选中它,然后单击附加

  6. Visual Studio将进入调试模式。 (此时,您的断点会说,他们将不会被击中,因为这些符号不会被加载。不要担心,就目前而言)。

  7. 做任何你做,使外部进程加载并运行代码。

Visual Studio将检测模块加载在外部进程,加载你的符号,并停止对你的断点。


NB在这两种情况下,如果外部进程加载从比其他地方你的DLL bin/Debug你的项目的文件夹,你必须确保你的DLL复制到其他位置, 每次你建立它的时候 (你可以设置多达发生自动在项目选项)。 否则,Visual Studio将无法检测正在加载的DLL是你想调试的一个。



Answer 2:

您可以使用附加到 调试菜单进程进行调试您的DLL项目。 您可能需要使用混合模式调试调试如果不与本地代码发生。 这可以通过选择托管和本机代码类型从当你在选择按钮,点击里面的连接处理窗口,在出现的窗口中完成。

如果您正在使用支持宏的Visual Studio版本,那么你可以创建一个新的宏用下面的代码来自动这一切:

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics

Public Module AttachToProcess

    Public Sub DebugMyDLL()
        DTE.ExecuteCommand("Build.BuildSelection")
        Dim ApplicationExePath As String = "C:\Program Files (x86)\foo\bar.exe"
        Shell(ApplicationExePath)
        Try
            Dim dbg2 As EnvDTE80.Debugger2 = DTE.Debugger
            Dim trans As EnvDTE80.Transport = dbg2.Transports.Item("Default")
            Dim dbgeng(2) As EnvDTE80.Engine
            dbgeng(0) = trans.Engines.Item("Managed (v4.0)")
            dbgeng(1) = trans.Engines.Item("Native")
            Dim proc2 As EnvDTE80.Process2 = dbg2.GetProcesses(trans, "<QualifierName>").Item("bar.exe")
            proc2.Attach2(dbgeng)
        Catch ex As System.Exception
            MsgBox(ex.Message)
        End Try
    End Sub

End Module

上面的宏试图构建项目,启动外部应用程序,然后自动将您的DLL到该程序。 你可以得到QualifierName为您的系统从附加到进程窗口。 此外,托管代码版本(“被管理(V4.0)”,在这种情况下)取决于你使用.NET Framework的版本。



Answer 3:

如果你不想/不能使用外部应用程序-您可以直接从Visual Studio中调用类库: Ctrl+Alt+I显示"Immediate"寡妇,那么你可以从你的类库从那里调用任何方法(使用断点)。 你必须键入完全合格的名称(即命名空间)。



Answer 4:

我觉得现在是比较实际的创建执行你的库代码单元测试项目 。 因此,你将一举两得:将能调试您的项目在相同的解决方案和方式开始涵盖测试你的代码。



文章来源: How to debug class library that called from external app?