[Dynamic Instrumentation] Add detailed diagnostics for line probe resolution#8316
Conversation
BenchmarksBenchmark execution time: 2026-03-17 15:48:36 Comparing candidate commit 675de0b in PR branch Found 9 performance improvements and 7 performance regressions! Performance is the same for 162 metrics, 14 unstable metrics. scenario:Benchmarks.Trace.ActivityBenchmark.StartStopWithChild netcoreapp3.1
scenario:Benchmarks.Trace.AgentWriterBenchmark.WriteAndFlushEnrichedTraces netcoreapp3.1
scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.AllCycleSimpleBody net6.0
scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.ObjectExtractorSimpleBody net6.0
scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.ObjectExtractorSimpleBody netcoreapp3.1
scenario:Benchmarks.Trace.Asm.AppSecEncoderBenchmark.EncodeLegacyArgs netcoreapp3.1
scenario:Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces netcoreapp3.1
scenario:Benchmarks.Trace.ElasticsearchBenchmark.CallElasticsearch netcoreapp3.1
scenario:Benchmarks.Trace.ElasticsearchBenchmark.CallElasticsearchAsync net472
scenario:Benchmarks.Trace.Log4netBenchmark.EnrichedLog net6.0
scenario:Benchmarks.Trace.Log4netBenchmark.EnrichedLog netcoreapp3.1
scenario:Benchmarks.Trace.SerilogBenchmark.EnrichedLog net6.0
scenario:Benchmarks.Trace.SerilogBenchmark.EnrichedLog netcoreapp3.1
scenario:Benchmarks.Trace.SingleSpanAspNetCoreBenchmark.SingleSpanAspNetCore net6.0
scenario:Benchmarks.Trace.SpanBenchmark.StartFinishScope net472
|
Execution-Time Benchmarks Report ⏱️Execution-time results for samples comparing This PR (8316) and master. ✅ No regressions detected - check the details below Full Metrics ComparisonFakeDbCommand
HttpMessageHandler
Comparison explanationExecution-time benchmarks measure the whole time it takes to execute a program, and are intended to measure the one-off costs. Cases where the execution time results for the PR are worse than latest master results are highlighted in **red**. The following thresholds were used for comparing the execution times:
Note that these results are based on a single point-in-time result for each branch. For full results, see the dashboard. Graphs show the p99 interval based on the mean and StdDev of the test run, as well as the mean value of the run (shown as a diamond below the graph). Duration chartsFakeDbCommand (.NET Framework 4.8)gantt
title Execution time (ms) FakeDbCommand (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8316) - mean (74ms) : 72, 77
master - mean (75ms) : 73, 78
section Bailout
This PR (8316) - mean (79ms) : 77, 81
master - mean (80ms) : 77, 82
section CallTarget+Inlining+NGEN
This PR (8316) - mean (1,086ms) : 1044, 1129
master - mean (1,106ms) : 1061, 1150
FakeDbCommand (.NET Core 3.1)gantt
title Execution time (ms) FakeDbCommand (.NET Core 3.1)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8316) - mean (116ms) : 113, 119
master - mean (119ms) : 115, 123
section Bailout
This PR (8316) - mean (118ms) : 115, 120
master - mean (120ms) : 117, 123
section CallTarget+Inlining+NGEN
This PR (8316) - mean (759ms) : 736, 783
master - mean (769ms) : 738, 800
FakeDbCommand (.NET 6)gantt
title Execution time (ms) FakeDbCommand (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8316) - mean (103ms) : 100, 106
master - mean (105ms) : 102, 108
section Bailout
This PR (8316) - mean (103ms) : 101, 105
master - mean (106ms) : 103, 108
section CallTarget+Inlining+NGEN
This PR (8316) - mean (747ms) : 700, 793
master - mean (749ms) : 716, 782
FakeDbCommand (.NET 8)gantt
title Execution time (ms) FakeDbCommand (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8316) - mean (102ms) : 99, 105
master - mean (104ms) : 101, 108
section Bailout
This PR (8316) - mean (103ms) : 102, 105
master - mean (106ms) : 102, 109
section CallTarget+Inlining+NGEN
This PR (8316) - mean (684ms) : 661, 706
master - mean (695ms) : 670, 719
HttpMessageHandler (.NET Framework 4.8)gantt
title Execution time (ms) HttpMessageHandler (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8316) - mean (194ms) : 190, 198
master - mean (194ms) : 191, 198
section Bailout
This PR (8316) - mean (197ms) : 194, 200
master - mean (198ms) : 194, 202
section CallTarget+Inlining+NGEN
This PR (8316) - mean (1,155ms) : 1099, 1211
master - mean (1,152ms) : 1106, 1199
HttpMessageHandler (.NET Core 3.1)gantt
title Execution time (ms) HttpMessageHandler (.NET Core 3.1)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8316) - mean (276ms) : 271, 281
master - mean (279ms) : 275, 283
section Bailout
This PR (8316) - mean (277ms) : 273, 280
master - mean (278ms) : 274, 282
section CallTarget+Inlining+NGEN
This PR (8316) - mean (901ms) : 868, 933
master - mean (907ms) : 877, 937
HttpMessageHandler (.NET 6)gantt
title Execution time (ms) HttpMessageHandler (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8316) - mean (272ms) : 266, 278
master - mean (272ms) : 265, 278
section Bailout
This PR (8316) - mean (272ms) : 265, 279
master - mean (271ms) : 267, 275
section CallTarget+Inlining+NGEN
This PR (8316) - mean (939ms) : 915, 963
master - mean (946ms) : 911, 980
HttpMessageHandler (.NET 8)gantt
title Execution time (ms) HttpMessageHandler (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8316) - mean (269ms) : 263, 275
master - mean (269ms) : 264, 274
section Bailout
This PR (8316) - mean (268ms) : 262, 274
master - mean (269ms) : 264, 274
section CallTarget+Inlining+NGEN
This PR (8316) - mean (837ms) : 814, 859
master - mean (835ms) : 814, 857
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5e5a686 to
675de0b
Compare
Summary of changes
Add richer line probe resolution diagnostics in the debugger so line probes report a specific resolution reason instead of only Bound/Unbound/Error.
Add extra debug logging in
DatadogMetadataReaderto distinguish common PDB lookup failures such as missing associated portable PDBs, missing standalone PDBs, or dnlib reader creation failures.Reason for change
Customer investigations around Live Debugger line probes getting stuck as unbound needed more actionable diagnostics to distinguish missing symbols, path/version mismatches, missing PDBs, and invalid source mappings.
Implementation details
Added
LineProbeResolveReasonandLineProbeResolutionDiagnosticsso the resolver can return structured diagnostics without changing probe binding behavior.Kept performance impact low by using a fast path for successful source-file resolution and only collecting assembly scan counts and same-filename matches when the fast path fails.
Reduced log noise by reserving detailed diagnostics for Debug.
Added PDB-reader debug logs.
Test coverage
LineProbeResolverTestOther details
This PR is focused on observability and diagnosis of line probe resolution failures; it does not attempt to fix the underlying customer binding issue itself.