How to get a release build with debugging information when using cargo?

The following command

$ cargo build

produces a non-optimized build with debugging information. On the contrary,

$ cargo build --release

produces an optimized build without debugging information.

Is there a way of producing an optimized build with debugging information? I need this to get meaningful profiling information.

31720 次浏览

As of Rust 1.57, Cargo now allows for custom profiles. This allows you to define your own profile that adds debug information:

[profile.release-with-debug]
inherits = "release"
debug = true

You can then use that profile when building:

% cargo build --profile=release-with-debug
Compiling buggin v0.1.0 (/tmp/buggin)
Finished release-with-debug [optimized + debuginfo] target(s) in 0.48s

Prior to this version, or if you always wanted to have debugging information, you can modify the release profile to include debugging symbols:

[profile.release]
debug = true

Note that the release profile and the bench profile differ.

See also

Or basically any of the top search results for "rust profiling":

Another option that I found that does not require changing Cargo.toml is to use the RUSTFLAGS environment variable:

$ RUSTFLAGS=-g cargo build --release