MCPcopy Create free account
hub / github.com/google/pprof / demangleSingleFunction

Function demangleSingleFunction

internal/symbolizer/symbolizer.go:284–316  ·  view source on GitHub ↗
(fn *profile.Function, opts []demangle.Option)

Source from the content-addressed store, hash-verified

282}
283
284func demangleSingleFunction(fn *profile.Function, opts []demangle.Option) {
285 if fn.Name != "" && fn.SystemName != fn.Name {
286 return // Already demangled.
287 }
288 if demangled := demangle.Filter(fn.SystemName, opts...); demangled != fn.SystemName {
289 fn.Name = demangled
290 return
291 }
292
293 // OSX has all the symbols prefixed with extra '_' so lets try
294 // once more without it
295 if strings.HasPrefix(fn.SystemName, "_") {
296 if demangled := demangle.Filter(fn.SystemName[1:], opts...); demangled != fn.SystemName[1:] {
297 fn.Name = demangled
298 return
299 }
300 }
301
302 // Could not demangle. Apply heuristics in case the name is
303 // already demangled.
304 name := fn.SystemName
305 if looksLikeDemangledCPlusPlus(name) {
306 for _, o := range opts {
307 switch o {
308 case demangle.NoParams:
309 name = removeMatching(name, '(', ')')
310 case demangle.NoTemplateParams:
311 name = removeMatching(name, '<', '>')
312 }
313 }
314 }
315 fn.Name = name
316}
317
318// looksLikeDemangledCPlusPlus is a heuristic to decide if a name is
319// the result of demangling C++. If so, further heuristics will be

Callers 2

DemangleFunction · 0.85

Calls 2

removeMatchingFunction · 0.85

Tested by 1

Used in the wild real call sites across dependent graphs

searching dependent graphs…