Skip to content

Commit 310fcc4

Browse files
committed
improve how we handle debugger settings and make symdb default true only when di might be enabled
1 parent 2dd316d commit 310fcc4

File tree

6 files changed

+44
-37
lines changed

6 files changed

+44
-37
lines changed

tracer/src/Datadog.Trace/ClrProfiler/Instrumentation.cs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -446,24 +446,29 @@ private static void StartDiagnosticManager()
446446
private static void InitializeDebugger(TracerSettings tracerSettings)
447447
{
448448
var manager = DebuggerManager.Instance;
449-
if (manager.DebuggerSettings.IsDebuggerProductsDisabled && manager.ExceptionReplaySettings.IsExceptionReplayDisabled)
449+
var debuggerSettings = manager.DebuggerSettings;
450+
bool diDisabled = !debuggerSettings.DynamicInstrumentationCanBeEnabled;
451+
bool coDisabled = !debuggerSettings.CodeOriginForSpansCanBeEnabled;
452+
bool erDisabled = !manager.ExceptionReplaySettings.CanBeEnabled || debuggerSettings.DynamicSettings.ExceptionReplayEnabled == false;
453+
454+
if (diDisabled && coDisabled && erDisabled)
450455
{
451-
Log.Debug("Debugger products are explicitly disabled via environment variables.");
456+
Log.Debug("Debugger products are explicitly disabled.");
452457
}
453458
else
454459
{
455-
if (!manager.DebuggerSettings.DynamicInstrumentationEnabled)
460+
if (!debuggerSettings.DynamicInstrumentationEnabled)
456461
{
457462
// we need this line for tests
458463
Log.Information("Dynamic Instrumentation is disabled. To enable it, please set DD_DYNAMIC_INSTRUMENTATION_ENABLED environment variable to 'true'.");
459464
}
460465

461-
_ = DebuggerManager.Instance.UpdateConfiguration(tracerSettings)
462-
.ContinueWith(
463-
t => Log.Error(t?.Exception, "Error initializing debugger"),
464-
CancellationToken.None,
465-
TaskContinuationOptions.OnlyOnFaulted,
466-
TaskScheduler.Default);
466+
_ = manager.UpdateConfiguration(tracerSettings)
467+
.ContinueWith(
468+
t => Log.Error(t?.Exception, "Error initializing debugger"),
469+
CancellationToken.None,
470+
TaskContinuationOptions.OnlyOnFaulted,
471+
TaskScheduler.Default);
467472
}
468473
}
469474

tracer/src/Datadog.Trace/Debugger/DebuggerManager.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ private void SetCodeOriginState(DebuggerSettings debuggerSettings)
237237
}
238238
else
239239
{
240-
Log.Debug("Code Origin for Spans is disabled. To enable it, please set {CodeOriginForSpansEnabled} environment variable to '1'/'true'.", ConfigurationKeys.Debugger.CodeOriginForSpansEnabled);
240+
Log.Debug("Code Origin for Spans is disabled");
241241
}
242242

243243
return;
@@ -276,7 +276,7 @@ private void SetExceptionReplayState(DebuggerSettings debuggerSettings)
276276
}
277277
else
278278
{
279-
Log.Debug("Exception Replay is disabled. To enable it, please set {ExceptionReplayEnabled} environment variable to '1'/'true'.", ConfigurationKeys.Debugger.ExceptionReplayEnabled);
279+
Log.Debug("Exception Replay is disabled");
280280
}
281281

282282
return;

tracer/src/Datadog.Trace/Debugger/DebuggerSettings.cs

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,10 @@ public DebuggerSettings(IConfigurationSource? source, IConfigurationTelemetry te
3939
source ??= NullConfigurationSource.Instance;
4040
var config = new ConfigurationBuilder(source, telemetry);
4141

42-
DynamicInstrumentationEnabled = config.WithKeys(ConfigurationKeys.Debugger.DynamicInstrumentationEnabled).AsBool(false);
43-
4442
_internalDynamicInstrumentationEnabled = config.WithKeys(ConfigurationKeys.Debugger.DynamicInstrumentationEnabled).AsBool();
4543

46-
SymbolDatabaseUploadEnabled = config.WithKeys(ConfigurationKeys.Debugger.SymbolDatabaseUploadEnabled).AsBool(true);
44+
SymbolDatabaseUploadEnabled = config.WithKeys(ConfigurationKeys.Debugger.SymbolDatabaseUploadEnabled).AsBool(true)
45+
&& _internalDynamicInstrumentationEnabled != false;
4746

4847
MaximumDepthOfMembersToCopy = config
4948
.WithKeys(ConfigurationKeys.Debugger.MaxDepthToSerialize)
@@ -139,8 +138,6 @@ public DebuggerSettings(IConfigurationSource? source, IConfigurationTelemetry te
139138

140139
RedactedTypes = new HashSet<string>(redactedTypes, StringComparer.OrdinalIgnoreCase);
141140

142-
CodeOriginForSpansEnabled = config.WithKeys(ConfigurationKeys.Debugger.CodeOriginForSpansEnabled).AsBool(false);
143-
144141
_internalCodeOriginForSpansEnabled = config.WithKeys(ConfigurationKeys.Debugger.CodeOriginForSpansEnabled).AsBool();
145142

146143
CodeOriginMaxUserFrames = config
@@ -153,13 +150,9 @@ public DebuggerSettings(IConfigurationSource? source, IConfigurationTelemetry te
153150

154151
internal ImmutableDynamicDebuggerSettings DynamicSettings { get; init; } = new();
155152

156-
internal bool IsDebuggerProductsDisabled => _internalCodeOriginForSpansEnabled == false && _internalDynamicInstrumentationEnabled == false;
153+
public bool DynamicInstrumentationEnabled => _internalDynamicInstrumentationEnabled == true || DynamicSettings.DynamicInstrumentationEnabled == true;
157154

158-
public bool DynamicInstrumentationEnabled
159-
{
160-
get => DynamicSettings.DynamicInstrumentationEnabled ?? _internalDynamicInstrumentationEnabled == true;
161-
init { }
162-
}
155+
public bool DynamicInstrumentationCanBeEnabled => _internalDynamicInstrumentationEnabled != false && DynamicSettings.DynamicInstrumentationEnabled != false;
163156

164157
public bool SymbolDatabaseUploadEnabled { get; }
165158

@@ -191,11 +184,9 @@ public bool DynamicInstrumentationEnabled
191184

192185
public HashSet<string> RedactedTypes { get; }
193186

194-
public bool CodeOriginForSpansEnabled
195-
{
196-
get => DynamicSettings.CodeOriginEnabled ?? _internalCodeOriginForSpansEnabled == true;
197-
init { }
198-
}
187+
public bool CodeOriginForSpansEnabled => _internalCodeOriginForSpansEnabled == true || DynamicSettings.CodeOriginEnabled == true;
188+
189+
public bool CodeOriginForSpansCanBeEnabled => _internalCodeOriginForSpansEnabled != false && DynamicSettings.CodeOriginEnabled != false;
199190

200191
public int CodeOriginMaxUserFrames { get; }
201192

tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionReplay.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using System.Threading;
1010
using System.Threading.Tasks;
1111
using Datadog.Trace.Agent;
12+
using Datadog.Trace.Configuration;
1213
using Datadog.Trace.Debugger.ExceptionAutoInstrumentation.ThirdParty;
1314
using Datadog.Trace.Debugger.Helpers;
1415
using Datadog.Trace.Debugger.Sink;
@@ -48,7 +49,7 @@ public void Initialize()
4849
{
4950
if (!Enabled)
5051
{
51-
Log.Information("Exception replay is disabled.");
52+
Log.Debug("Exception Replay is disabled. To enable it, please set {ExceptionReplayEnabled} environment variable to '1'/'true'.", ConfigurationKeys.Debugger.ExceptionReplayEnabled);
5253
return;
5354
}
5455

tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/ExceptionReplaySettings.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
#nullable enable
77
using System;
88
using Datadog.Trace.Configuration;
9-
using Datadog.Trace.Configuration.ConfigurationSources.Telemetry;
109
using Datadog.Trace.Configuration.Telemetry;
1110
using Datadog.Trace.Telemetry;
1211

@@ -17,16 +16,15 @@ internal class ExceptionReplaySettings
1716
public const int DefaultMaxFramesToCapture = 4;
1817
public const int DefaultRateLimitSeconds = 60 * 60; // 1 hour
1918
public const int DefaultMaxExceptionAnalysisLimit = 100;
20-
private bool? _internalExceptionReplayEnabled;
2119

2220
public ExceptionReplaySettings(IConfigurationSource? source, IConfigurationTelemetry telemetry)
2321
{
2422
source ??= NullConfigurationSource.Instance;
2523
var config = new ConfigurationBuilder(source, telemetry);
2624

27-
Enabled = config.WithKeys(ConfigurationKeys.Debugger.ExceptionReplayEnabled).AsBool(false);
28-
29-
_internalExceptionReplayEnabled = config.WithKeys(ConfigurationKeys.Debugger.ExceptionReplayEnabled).AsBool();
25+
var enabledResult = config.WithKeys(ConfigurationKeys.Debugger.ExceptionReplayEnabled).AsBool();
26+
Enabled = enabledResult ?? false;
27+
CanBeEnabled = enabledResult != false;
3028

3129
CaptureFullCallStack = config.WithKeys(ConfigurationKeys.Debugger.ExceptionReplayCaptureFullCallStackEnabled).AsBool(false);
3230

@@ -51,7 +49,7 @@ public ExceptionReplaySettings(IConfigurationSource? source, IConfigurationTelem
5149

5250
public bool Enabled { get; }
5351

54-
internal bool IsExceptionReplayDisabled => _internalExceptionReplayEnabled == false;
52+
public bool CanBeEnabled { get; }
5553

5654
public int MaximumFramesToCapture { get; }
5755

tracer/src/Datadog.Trace/Debugger/SpanCodeOrigin/SpanCodeOrigin.cs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using System;
99
using System.Diagnostics;
1010
using System.Reflection;
11+
using Datadog.Trace.Configuration;
1112
using Datadog.Trace.Debugger.Caching;
1213
using Datadog.Trace.Debugger.Symbols;
1314
using Datadog.Trace.Logging;
@@ -35,11 +36,17 @@ internal SpanCodeOrigin(DebuggerSettings settings)
3536

3637
internal void SetCodeOriginForExitSpan(Span? span)
3738
{
38-
if (span == null || !Settings.CodeOriginForSpansEnabled)
39+
if (span == null)
3940
{
4041
return;
4142
}
4243

44+
if (!Settings.CodeOriginForSpansCanBeEnabled)
45+
{
46+
Log.Debug("Code Origin for Spans is disabled. To enable it, please set {CodeOriginForSpansEnabled} environment variable to '1'/'true'.", ConfigurationKeys.Debugger.CodeOriginForSpansEnabled);
47+
return;
48+
}
49+
4350
if (span.Tags is WebTags { SpanKind: SpanKinds.Server })
4451
{
4552
// entry span
@@ -60,9 +67,14 @@ internal void SetCodeOriginForEntrySpan(Span? span, Type? type, MethodInfo? meth
6067
{
6168
if (span == null ||
6269
type == null ||
63-
method == null ||
64-
!Settings.CodeOriginForSpansEnabled)
70+
method == null)
71+
{
72+
return;
73+
}
74+
75+
if (!Settings.CodeOriginForSpansCanBeEnabled)
6576
{
77+
Log.Debug("Code Origin for Spans is disabled. To enable it, please set {CodeOriginForSpansEnabled} environment variable to '1'/'true'.", ConfigurationKeys.Debugger.CodeOriginForSpansEnabled);
6678
return;
6779
}
6880

0 commit comments

Comments
 (0)