【问题标题】:Debugging when my code is started by external program with Process.Start()当我的代码由外部程序使用 Process.Start() 启动时进行调试
【发布时间】:2014-06-13 13:41:35
【问题描述】:

假设我有一个 C# WinForms 应用程序,它是由外部程序简单地使用 Process.Start(MyModule.exe) 启动的。

我尝试使用我的项目属性->调试->开始操作->开始来调试我的代码外部程序(当然要设置适当的工作目录)。

我的另一个尝试是调试->附加到进程

更新:我的模块和外部程序都使用一个资源。所以外部程序释放它,然后调用 Process.Start(),等待我的进程退出然后再次捕获资源。所以当你的程序已经在运行时,我无法附加。

它们都失败了 - Program.cs 中的断点从未被命中。

那么,在这种情况下我该如何调试我的代码呢?

【问题讨论】:

  • 认为 附加到进程 如果您在程序已经运行时附加应该可以工作。您是附加到您的应用程序还是附加到启动它的其他程序?
  • 我附加到外部程序。我已经更新了我的帖子以获取一些信息。

标签: c# debugging process.start external-process


【解决方案1】:

我知道有两种方法可以轻松解决这个问题。第一种方法是让您的程序通过Debugger.Launch() 请求附加调试器作为它在Main 中执行的第一件事

public static void Main(string[] args)
{
    Debugger.Launch();

    //Rest of your code here
}

这将显示如下对话框

这将允许您附加到正在运行的 Visual Studio 或启动一个新实例。

当你不能使用以前的方法时(例如我认为它在服务中不起作用)的另一种解决方法是在代码的开头放置一个循环,该循环将永远循环直到附加调试器,这使您有足够的时间来执行您之前尝试过的“附加到进程”方法,而不会让程序继续进行。

public static void Main(string[] args)
{
    while(!Debugger.IsAttached)
    {
        Thread.Sleep(1000); //Sleep 1 second and then check again.
    }

    //Rest of your code here
}

【讨论】:

  • 我感兴趣的是:Debugger.Launch() 或 Debugger.IsAttached() 是否仅在代码在 Debug Configuration 中编译时才有效?
  • @this.myself 这两个方法都在发布模式下处于活动状态,这是Debug 而不是Debugger 中的一些函数在发布期间不会被编译。这是通过Conditional 属性完成的,如果您右键单击该方法并执行Navigate to->Metadata,您可以查看您想知道的方法是否具有[Conditional("DEBUG")] 属性。
  • @Scott Chamberlain:感谢您的解释!
【解决方案2】:

您可以使用两种不同的方法System.Diagnostics.Debugger.Launch()System.Diagnostics.Debugger.Break() 第一种将附加一个调试器(让您选择哪个),然后什么也不做。在已经连接的情况下,什么都不会发生。 在没有附加调试器的情况下,后者将与Launch 完全一样,如果附加了调试器,它将作为断点。

所以只需在您希望断点所在的位置写上System.Diagnostics.Debugger.Break();

这将导致一个对话框询问您希望如何调试程序(这当然也意味着您应该在完成调试后删除该行)

在对话框中选择适当的 VS 实例(或创建一个新实例),然后像往常一样继续调试

【讨论】:

  • Debugger.Break() - 是正确的语法,但它不适合我
  • 什么不起作用?程序是用 release 构建还是 debug 构建?
  • 调试。我尝试过 Start external program 方法 - 单击外部程序中的相应按钮后,我的模块只是打开了..
  • 只需启动调用Process.Start(...)的程序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
  • 2017-04-10
相关资源
最近更新 更多