-
Notifications
You must be signed in to change notification settings - Fork 236
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: no debug symbols as default and add a command to build with debug symbols #1849
feat: no debug symbols as default and add a command to build with debug symbols #1849
Conversation
8710e3b
to
f1c867b
Compare
f1c867b
to
621dc8b
Compare
@ian Should I strip the executable file? The size will be reduced by 30% ( |
This comment has been minimized.
This comment has been minimized.
Yes, you can strip the executable in package.sh |
Have we checked and confirmed that stripped executable runs without any problems? |
From the mainnet startup, I used the binary which removed debug and strip, no problems found for the time being on my machine |
Personally I'm not so confident on stripping the binary, I would suggest we first opt for the safe side than stripping more bytes. Reducing the binary from some hundred megabytes to 35M is not so different than 24M IMHO. Later when we are more confident stropping won't cause problems, we can add the relevant part then |
bors r+ |
1849: feat: no debug symbols as default and add a command to build with debug symbols r=quake a=yangby-cryptape 1. [Stable releases of cargo don't support custom profiles.](../../../rust-lang/cargo/issues/6988) 2. We can't use another manifest file in same directory since `error: the manifest-path must be a path to a Cargo.toml file`. 3. I try to put a debug version of `Cargo.toml` in another directory, it's conflicted with the original `Cargo.toml`. Each crate should be in only one workspace. 4. Add arguments into `RUSTFLAGS` to control `rustc`, but it's unable to achieve the same effect. According to [The Cargo Book](https://doc.rust-lang.org/cargo/reference/manifest.html#the-profile-sections): `debug = true` is equivalent to `-C debuginfo=2` compiler flag. According to `rustc --help`, `-g` is equivalent to `-C debuginfo=2`. But when use `debug = true`, the size of debug symbols in executable file is bigger than `-g` (or `-C debuginfo=2`), ~~and `debug = true` will enable some other debug features, for example: `debug_assertions = true` (I found it in [rust source code](https://github.com/rust-lang/rust/blob/695fe965173795f9242dfcad6d1c07d7a17b106a/src/bootstrap/config.rs#L631-L632), but it doesn't works when I test it)~~. So, I think `debug = true` is better than `-g` or `-C debuginfo=2` for debugging. - Execute `cargo build --release` without `debug = true`. The size of `ckb` is 36876256 Bytes (36MB). After strip, it will be 26102560 Bytes (25MB). - Execute `cargo build --release` with `debug = true`. The size of `ckb` is 439163736 Bytes (419MB). After strip, it will be 26098544 Bytes (25MB). - Execute `RUSTFLAGS="-g" cargo build --release` without `debug = true`. The size of `ckb` is 366969536 Bytes (350MB). After strip, it will be 26155888 Bytes (25MB). - Execute `RUSTFLAGS="-C debuginfo=2" cargo build --release` without `debug = true`. The size of `ckb` is 26151792 Bytes (351MB). After strip, it will be 26098544 Bytes (25MB). Use same command always get the same size executable file. **It's deterministic.** #### Appendix <details><summary>The stripped part for stripping an executable file which compile by <code>cargo build --release</code> without <code>debug = true</code>.</summary> <pre> Sections: Idx Name Size VMA LMA File off Algn Flags 27 .comment 0000009a 0000000000000000 0000000000000000 018e41fa 2**0 CONTENTS, READONLY 28 .debug_aranges 00000270 0000000000000000 0000000000000000 018e4294 2**0 CONTENTS, READONLY, DEBUGGING 29 .debug_pubnames 0003bcbd 0000000000000000 0000000000000000 018e4504 2**0 CONTENTS, READONLY, DEBUGGING 30 .debug_info 00150220 0000000000000000 0000000000000000 019201c1 2**0 CONTENTS, READONLY, DEBUGGING 31 .debug_abbrev 00006993 0000000000000000 0000000000000000 01a703e1 2**0 CONTENTS, READONLY, DEBUGGING 32 .debug_line 000a3beb 0000000000000000 0000000000000000 01a76d74 2**0 CONTENTS, READONLY, DEBUGGING 33 .debug_frame 00001230 0000000000000000 0000000000000000 01b1a960 2**3 CONTENTS, READONLY, DEBUGGING 34 .debug_str 000b5275 0000000000000000 0000000000000000 01b1bb90 2**0 CONTENTS, READONLY, DEBUGGING 35 .debug_loc 001579db 0000000000000000 0000000000000000 01bd0e05 2**0 CONTENTS, READONLY, DEBUGGING 36 .debug_macinfo 00000031 0000000000000000 0000000000000000 01d287e0 2**0 CONTENTS, READONLY, DEBUGGING 37 .debug_pubtypes 00019c31 0000000000000000 0000000000000000 01d28811 2**0 CONTENTS, READONLY, DEBUGGING 38 .debug_ranges 00098440 0000000000000000 0000000000000000 01d42442 2**0 CONTENTS, READONLY, DEBUGGING </pre> </details> <details><summary>Size of debug symbols in executable files for different compilation conditions.</summary> <pre> Sections: Idx Name Size VMA LMA File off Algn Flags // debug = true ... omitted ... 29 .debug_aranges 000002a0 0000000000000000 0000000000000000 018e3294 2**0 CONTENTS, READONLY, DEBUGGING 30 .debug_pubnames 0225e9f0 0000000000000000 0000000000000000 018e3534 2**0 CONTENTS, READONLY, DEBUGGING 31 .debug_info 0783474a 0000000000000000 0000000000000000 03b41f24 2**0 CONTENTS, READONLY, DEBUGGING 32 .debug_abbrev 001a9b4b 0000000000000000 0000000000000000 0b37666e 2**0 CONTENTS, READONLY, DEBUGGING 33 .debug_line 013b5e42 0000000000000000 0000000000000000 0b5201b9 2**0 CONTENTS, READONLY, DEBUGGING 34 .debug_frame 00001230 0000000000000000 0000000000000000 0c8d6000 2**3 CONTENTS, READONLY, DEBUGGING 35 .debug_str 0258ab85 0000000000000000 0000000000000000 0c8d7230 2**0 CONTENTS, READONLY, DEBUGGING 36 .debug_loc 06240092 0000000000000000 0000000000000000 0ee61db5 2**0 CONTENTS, READONLY, DEBUGGING 37 .debug_macinfo 00000855 0000000000000000 0000000000000000 150a1e47 2**0 CONTENTS, READONLY, DEBUGGING 38 .debug_pubtypes 02ba7a4e 0000000000000000 0000000000000000 150a269c 2**0 CONTENTS, READONLY, DEBUGGING 39 .debug_ranges 021377a0 0000000000000000 0000000000000000 17c4a0ea 2**0 CONTENTS, READONLY, DEBUGGING // -g ... omitted ... 29 .debug_aranges 00000270 0000000000000000 0000000000000000 018f2294 2**0 CONTENTS, READONLY, DEBUGGING 30 .debug_pubnames 01b582ce 0000000000000000 0000000000000000 018f2504 2**0 CONTENTS, READONLY, DEBUGGING 31 .debug_info 05ae5ecb 0000000000000000 0000000000000000 0344a7d2 2**0 CONTENTS, READONLY, DEBUGGING 32 .debug_abbrev 0014d4d9 0000000000000000 0000000000000000 08f3069d 2**0 CONTENTS, READONLY, DEBUGGING 33 .debug_line 010586d0 0000000000000000 0000000000000000 0907db76 2**0 CONTENTS, READONLY, DEBUGGING 34 .debug_frame 00001230 0000000000000000 0000000000000000 0a0d6248 2**3 CONTENTS, READONLY, DEBUGGING 35 .debug_str 01ca527f 0000000000000000 0000000000000000 0a0d7478 2**0 CONTENTS, READONLY, DEBUGGING 36 .debug_loc 05771c55 0000000000000000 0000000000000000 0bd7c6f7 2**0 CONTENTS, READONLY, DEBUGGING 37 .debug_macinfo 0000078b 0000000000000000 0000000000000000 114ee34c 2**0 CONTENTS, READONLY, DEBUGGING 38 .debug_pubtypes 025cd42a 0000000000000000 0000000000000000 114eead7 2**0 CONTENTS, READONLY, DEBUGGING 39 .debug_ranges 01e419c0 0000000000000000 0000000000000000 13abbf01 2**0 CONTENTS, READONLY, DEBUGGING </pre> </details> Co-authored-by: Boyu Yang <yangby@cryptape.com>
Build succeeded
|
Stable releases of cargo don't support custom profiles.
We can't use another manifest file in same directory since
error: the manifest-path must be a path to a Cargo.toml file
.I try to put a debug version of
Cargo.toml
in another directory, it's conflicted with the originalCargo.toml
. Each crate should be in only one workspace.Add arguments into
RUSTFLAGS
to controlrustc
, but it's unable to achieve the same effect.According to The Cargo Book:
debug = true
is equivalent to-C debuginfo=2
compiler flag.According to
rustc --help
,-g
is equivalent to-C debuginfo=2
.But when use
debug = true
, the size of debug symbols in executable file is bigger than-g
(or-C debuginfo=2
),and.debug = true
will enable some other debug features, for example:debug_assertions = true
(I found it in rust source code, but it doesn't works when I test it)So, I think
debug = true
is better than-g
or-C debuginfo=2
for debugging.cargo build --release
withoutdebug = true
.The size of
ckb
is 36876256 Bytes (36MB).After strip, it will be 26102560 Bytes (25MB).
cargo build --release
withdebug = true
.The size of
ckb
is 439163736 Bytes (419MB).After strip, it will be 26098544 Bytes (25MB).
RUSTFLAGS="-g" cargo build --release
withoutdebug = true
.The size of
ckb
is 366969536 Bytes (350MB).After strip, it will be 26155888 Bytes (25MB).
RUSTFLAGS="-C debuginfo=2" cargo build --release
withoutdebug = true
.The size of
ckb
is 26151792 Bytes (351MB).After strip, it will be 26098544 Bytes (25MB).
Use same command always get the same size executable file. It's deterministic.
Appendix
The stripped part for stripping an executable file which compile by
cargo build --release
withoutdebug = true
.Size of debug symbols in executable files for different compilation conditions.