You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add support for dumping and using precise debug info (#61735)
* In the JIT, add support for dumping the precise debug info out through
an environment variable `DOTNET_JitDumpPreciseDebugInfoFile` in a
simple JSON format. This is a stopgap until we expose the extra
information through ETW events.
* In dotnet-pgo, add an argument --precise-debug-info-file which can
point to the file produced by the JIT. When used, dotnet-pgo will get
native<->IL mappings from this file instead of through ETW events.
* In dotnet-pgo, add support for attributing samples to inlinees when
that information is present. This changes the attribution process a
bit: previously, we would group all LBR data/samples and then
construct the profile from all the data. We now do it in a more
streaming way where there is a SampleCorrelator that can handle
individual LBR records and individual samples.
* In dotnet-pgo, add an argument --dump-worst-overlap-graphs-to which
can be used in the compare-mibc command to dump out a .dot file
containing the flow graph of the methods with the worst overlap
measures, and showing the relative weight count on each basic block
and edge for the two profiles being compared. This is particular
useful to find out where we are producing incorrect debug mappings, by
comparing spgo.mibc and instrumented.mibc files.
syntax.DefineOption(name:"spgo",value:refSpgo,help:"Base profile on samples in the input. Uses last branch records if available and otherwise raw IP samples.",requireValue:false);
200
-
syntax.DefineOption(name:"spgo-with-block-counts",value:refSpgoIncludeBlockCounts,help:"Include block counts in the written .mibc file. If neither this nor spgo-with-edge-counts are specified, then defaults to true.",requireValue:false);
201
-
syntax.DefineOption(name:"spgo-with-edge-counts",value:refSpgoIncludeEdgeCounts,help:"Include edge counts in the written .mibc file.",requireValue:false);
202
207
syntax.DefineOption(name:"spgo-min-samples",value:refSpgoMinSamples,help:$"The minimum number of total samples a function must have before generating profile data for it with SPGO. Default: {SpgoMinSamples}",requireValue:false);
syntax.DefineOption(name:"include-full-graphs",value:refIncludeFullGraphs,help:"Include all blocks and edges in the written .mibc file, regardless of profile counts",requireValue:false);
206
210
207
211
HelpOption();
208
212
}
@@ -305,6 +309,12 @@ void HelpOption()
305
309
CompareMibc=DefineFileOptionList(name:"i|input",help:"The input .mibc files to be compared. Specify as --input file1.mibc --input file2.mibc");
306
310
if(CompareMibc.Count!=2)
307
311
Help=true;
312
+
313
+
syntax.DefineOption(name:"dump-worst-overlap-graphs",value:refDumpWorstOverlapGraphs,help:"Number of graphs to dump to .dot format in dump-worst-overlap-graphs-to directory");
314
+
stringdumpWorstOverlapGraphsTo=null;
315
+
syntax.DefineOption(name:"dump-worst-overlap-graphs-to",value:refdumpWorstOverlapGraphsTo,help:"Number of graphs to dump to .dot format in dump-worst-overlap-graphs-to directory");
0 commit comments