Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Debugging when my code is started by external program with Process.Start()

Suppose I have a C# WinForms application and it is started by external program simply by using Process.Start(MyModule.exe).

I've tried to debug my code by using My project properties->Debug->Start Action->Start external program (with setting proper Working directory of course).

My enother attempt was Debug->Attach to process

UPDATE: Both my module and external program use one resource. So external program releases it, then calls Process.Start(), waits for my process to exit ans then capture the resource again. So I can't attach when your program is already running.

Both of them failed - breakpoint in Program.cs was never hit.

So, how can I debug my code in such circumstances?

like image 485
bairog Avatar asked Jan 10 '23 17:01

bairog


1 Answers

There are two ways I know of to easily solve this problem. The first way is have your program request a debugger attach to it as the first thing it does in Main via Debugger.Launch()

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

    //Rest of your code here
}

This will make a dialog like the following show up
enter image description here

This will allow you to attach to your running visual studio or start a new instance.

The other way to solve this when you can't use the previous method (for example I don't think it works inside services) is put a loop at the start of your code that will loop forever until a debugger is attached, this gives you enough time to do the "Attach to process" method you tried earlier without letting the program progress.

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

    //Rest of your code here
}
like image 85
Scott Chamberlain Avatar answered Feb 05 '23 02:02

Scott Chamberlain