如何调试从外部应用调用的类库?

Ser*_*ejs 24 c# debugging class-library visual-studio visual-studio-debugging

有一个执行C#脚本的外部工作流,可以使用DLL文件(我的类库).

是否可以将调试附加到我的类库项目中,这样一旦这个WF调用它就会遇到断点?

谢谢

T.J*_*der 28

是的,您可以使用Visual Studio执行此操作.您有两种选择:

配置项目以启动外部程序

  1. 打开你的DLL项目.

  2. 在项目的属性上,转到" 调试"选项卡.

  3. 选择启动外部程序并提供将调用您的DLL的外部程序的路径,以及您可能需要提供的任何命令行参数,以及相关的工作目录.

  4. 保存项目.

  5. 在代码中设置您想要的断点.

  6. 按F5开始调试.(此时,你的断点会说它们不会被命中,因为符号没有被加载.现在不用担心.)

  7. 做任何事情都可以使外部应用程序加载您的库并运行您的代码.

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

附加到现有流程

如果您无法启动该流程但必须附加到已经运行的流程,您也可以这样做:

(旁注:如果您使用的是Visual Studio的"Express"版本,我认为它不具备此功能,但我不确定.这很容易说明:您要么拥有菜单下面步骤4中提到的项目与否.)

  1. 确保进程正在运行.

  2. 打开你的DLL项目.

  3. 设置你的断点等

  4. Debug菜单中,选择Attach to process ...

  5. 在结果对话框中,在列表中找到该进程,突出显示该进程,然后单击" 附加".

  6. Visual Studio将进入调试模式.(此时,你的断点会说它们不会被命中,因为符号没有被加载.现在不用担心.)

  7. 执行任何操作以使外部进程加载并运行代码.

Visual Studio将检测外部进程中的模块负载,加载符号,并在断点处停止.


注意在这两种情况下,如果外部进程从bin/Debug项目文件夹以外的其他位置加载DLL ,则必须确保每次构建时将DLL复制到该其他位置(您可以将其设置为自动执行项目选择).否则,Visual Studio将无法检测到正在加载的DLL是您尝试调试的DLL.