TeamCity.CSharpInteractive/Debugger.cs (30 lines of code) (raw):
namespace TeamCity.CSharpInteractive;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
[ExcludeFromCodeCoverage]
internal class Debugger : IActive
{
private readonly ILog<Debugger> _log;
private readonly IEnvironmentVariables _environmentVariables;
public Debugger(
ILog<Debugger> log,
IEnvironmentVariables environmentVariables)
{
_log = log;
_environmentVariables = environmentVariables;
}
public IDisposable Activate()
{
if (_environmentVariables.GetEnvironmentVariable("DEBUG_CSI") == null)
{
return Disposable.Empty;
}
_log.Warning($"\nWaiting for debugger in process [{System.Environment.ProcessId}] \"{Process.GetCurrentProcess().ProcessName}\".");
while (!System.Diagnostics.Debugger.IsAttached)
{
Thread.Sleep(100);
}
System.Diagnostics.Debugger.Break();
return Disposable.Empty;
}
}