打印cfg!(profile_compiler_runs)

·

1 min read

  • Resolved(None, Path {...})表示这是一个完全解析的路径。None表示这个路径没有前缀,也就是说它不是一个显式的类型限定路径(如 <T as Trait>::function)。

  • Path里的字段包含这个路径的一些信息:

    • span给出了源代码中这个路径的位置。

    • res给出了这个路径最终指向的定义,这里是Def(AssocFn, DefId(2:6571 ~ core[5bc6]::fmt::Display::fmt)),意味着这个路径指向的是一个关联函数(即,某个类型的方法),该函数在编译器中的内部标识是DefId(2:6571 ~ core[5bc6]::fmt::Display::fmt)

    • segments是一个路径段的数组,表示这个路径的各个部分。每个PathSegment包含一部分路径的名称(ident),以及这个路径部分的一些额外信息,如它所对应的定义(res),可能的类型参数(args),等等。

这样,当你的程序在编译时,如果存在 cfg!(profile_compiler_runs) 的代码块,那么它就会被执行。这包括你提供的 `println!` 语句。


RUSTFLAGS="--cfg profile_compiler_runs" cargo run --release --bin unsafe-counter -- /root/original-lab/laertes/test-inputs/bzip2/rust/c2rust-lib.rs