commit | 20978b51388db0648809a2c5cc88b494c7945ec1 | [log] [tgz] |
---|---|---|
author | Nathan Daly <NHDaly@gmail.com> | Mon Nov 09 17:47:23 2020 -0500 |
committer | GitHub <noreply@github.com> | Mon Nov 09 14:47:23 2020 -0800 |
tree | 31aaa1e5216bf09aa9a5bde1161a9d5b58fdfd15 | |
parent | 3e6fc7fc9c4c9330ef785c791f2fc143499b5cc7 [diff] |
Add missing `escapeForDot()` to labels for function names (#564) * Add missing `escapeForDot()` to labels for function names In some programming languages, e.g. JuliaLang, function names can contain arbitrary characters. These are represented via the string macro `var"..."`, which allows constructing identifiers that wouldn't otherwise parse. These names are handled correctly by `pprof` in the FlameGraph view, but before this commit, they would produce an invalid dot file. This fixes the dot graph export for names that contain `"`. * Add separate test for name escaping * Apply `escapeStringForDot()` in more places, to cover more cases of potentially harmful string labels. Remove mistaken `escapeStringForDot()` around tag names * gofmt cleanups * Cleanup: Remove commented out line * Rename escapeForDot => escapeAllForDot; escapeStringForDot => escapeForDot * Apply formatting suggestions from code review * Remove unneeded `Residual` from dotgraph test I had unwittingly copied a test that was _specifically tesing_ Residual edges (the name of the test set I copied was `TestComposeWithTagsAndResidualEdge`). In my test, I'm simply testing the printing of the _names_ of the edges, and it's not relevant whether the edges are residual or not, so I've removed it just to simplify the test. * Fix Windows test (after fixing Windows printing): properly escape `\` in paths This PR adds proper escaping to dot strings, so that the backslash (`\`) in windows paths will now print correctly in dot output. Previously, the tests were incorreclty checking for an unescaped single `\` in the output, which isn't a valid `dot` string, so this commit updates the dot tests to expect the newly correct output. Updates the path testing assertions in various test files * Fix unexported comment in internal/graph/dotgraph.go Co-authored-by: Alexey Alexandrov <aalexand@users.noreply.github.com>
pprof is a tool for visualization and analysis of profiling data.
pprof reads a collection of profiling samples in profile.proto format and generates reports to visualize and help analyze the data. It can generate both text and graphical reports (through the use of the dot visualization package).
profile.proto is a protocol buffer that describes a set of callstacks and symbolization information. A common usage is to represent a set of sampled callstacks from statistical profiling. The format is described on the proto/profile.proto file. For details on protocol buffers, see https://developers.google.com/protocol-buffers
Profiles can be read from a local file, or over http. Multiple profiles of the same type can be aggregated or compared.
If the profile samples contain machine addresses, pprof can symbolize them through the use of the native binutils tools (addr2line and nm).
This is not an official Google product.
Prerequisites:
Go development kit of a supported version. Follow these instructions to install the go tool and set up GOPATH.
Graphviz: http://www.graphviz.org/ Optional, used to generate graphic visualizations of profiles
To build and install it, use the go get
tool.
go get -u github.com/google/pprof
Remember to set GOPATH to the directory where you want pprof to be installed. The binary will be in $GOPATH/bin
and the sources under $GOPATH/src/github.com/google/pprof
.
pprof can read a profile from a file or directly from a server via http. Specify the profile input(s) in the command line, and use options to indicate how to format the report.
% pprof -top [main_binary] profile.pb.gz Where main_binary: Local path to the main program binary, to enable symbolization profile.pb.gz: Local path to the profile in a compressed protobuf, or URL to the http service that serves a profile.
pprof -web [main_binary] profile.pb.gz
If no output formatting option is specified, pprof runs on interactive mode, where reads the profile and accepts interactive commands for visualization and refinement of the profile.
pprof [main_binary] profile.pb.gz This will open a simple shell that takes pprof commands to generate reports. Type 'help' for available commands/options.
If the -http
flag is specified, pprof starts a web server at the specified host:port that provides an interactive web-based interface to pprof. Host is optional, and is “localhost” by default. Port is optional, and is a random available port by default. -http=":"
starts a server locally at a random port.
pprof -http=[host]:[port] [main_binary] profile.pb.gz
The preceding command should automatically open your web browser at the right page; if not, you can manually visit the specified port in your web browser.
pprof can read perf.data
files generated by the Linux perf tool by using the perf_to_profile
program from the perf_data_converter package.
See doc/README.md for more detailed end-user documentation.
See CONTRIBUTING.md for contribution documentation.
See proto/README.md for a description of the profile.proto format.