有执行C#脚本,并能够与DLL文件(我的类库)工作的外部工作流程。
是否有可能调试安装到我的类库项目,所以断点会打一次,这WF会打电话吗?
谢谢
有执行C#脚本,并能够与DLL文件(我的类库)工作的外部工作流程。
是否有可能调试安装到我的类库项目,所以断点会打一次,这WF会打电话吗?
谢谢
是的,你可以使用Visual Studio这样做。 你有两个选择:
打开DLL项目。
在该项目的性质,进入调试选项卡。
选择启动外部程序并给予外部程序将调用你的DLL,你可能需要提供的任何命令行参数沿的路径,工作目录,如果这是相关的。
保存该项目。
要将其设置在您的代码中设置断点。
按F5开始调试。 (此时,您的断点会说,他们将不会被击中,因为这些符号不会被加载。不要担心,就目前而言)。
做任何你做,使外部应用程序到您的书架和运行代码。
Visual Studio将检测模块加载,加载符号,并停止在断点处。
如果您无法启动进程,而是要连接到一个已经运行的过程中,你也可以这样做:
(附注:如果你正在使用Visual Studio的“快车”版,我不认为它有这个功能,但我不能确定有关这是很容易分辨:你要么有菜单项上低于或不步骤4提及。)
确保正在运行的进程。
打开DLL项目。
设置断点,等等。
从Debug菜单,选择附加处理...
在出现的对话框中,找到进程列表中,选中它,然后单击附加 。
Visual Studio将进入调试模式。 (此时,您的断点会说,他们将不会被击中,因为这些符号不会被加载。不要担心,就目前而言)。
做任何你做,使外部进程加载并运行代码。
Visual Studio将检测模块加载在外部进程,加载你的符号,并停止对你的断点。
NB在这两种情况下,如果外部进程加载从比其他地方你的DLL bin/Debug
你的项目的文件夹,你必须确保你的DLL复制到其他位置, 每次你建立它的时候 (你可以设置多达发生自动在项目选项)。 否则,Visual Studio将无法检测正在加载的DLL是你想调试的一个。
您可以使用附加到 调试菜单进程进行调试您的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的版本。
如果你不想/不能使用外部应用程序-您可以直接从Visual Studio中调用类库: Ctrl+Alt+I
显示"Immediate"
寡妇,那么你可以从你的类库从那里调用任何方法(使用断点)。 你必须键入完全合格的名称(即命名空间)。
我觉得现在是比较实际的创建执行你的库代码单元测试项目 。 因此,你将一举两得:将能调试您的项目在相同的解决方案和方式开始涵盖测试你的代码。