gpt4 book ai didi

c++ - 是否可以通过 NM 仅打印用户定义的变量?

转载 作者:行者123 更新时间:2023-11-30 04:25:47 34 4
gpt4 key购买 nike

nm 的输出中有很多系统变量,看起来像这样

N
_CRT_MT
_CRT_fmode
_CRT_glob
Dictionary::variable4
namespace1::variable1
__cpu_features
__crt_xc_end__
__crt_xc_start__
__crt_xi_end__
__crt_xi_start__
__crt_xl_start__
__crt_xp_end__
__crt_xp_start__
__crt_xt_end__
__crt_xt_start__
__tls_end__
__tls_start__
__xl_a
__xl_c
__xl_d
__xl_z
_argc
_argv
_bss_end__
_bss_start__
_data_end__
_data_start__
_end__
_fmode
_tls_end
_tls_index
_tls_start
_tls_used
mingw_initltsdrot_force
mingw_initltsdyn_force
mingw_initltssuo_force
variable0
variable10

是否可以仅打印用户定义的变量 - 在本例中为 variable10、variable0、Dictionary::variable1、Dictionary::variable4、N?

最佳答案

据我所知没有。但至少您可以安全地过滤所有以双下划线或下划线 + 大写字母开头的变量,因为这些是为实现保留的:

$ nm -j foo | grep -v '^_[A-Z]\|^__\+[A-Za-z]'
N
Dictionary::variable4
namespace1::variable1
_argc
_argv
_bss_end__
_bss_start__
_data_end__
_data_start__
_end__
_fmode
_tls_end
_tls_index
_tls_start
_tls_used
mingw_initltsdrot_force
mingw_initltsdyn_force
mingw_initltssuo_force
variable0
variable10

您可能可以通过添加额外的模式来过滤更多内容,这些模式可靠地表示实现定义的标识符。

或者,创建一个空的可执行文件(即包含 用户定义符号的文件)并通过comm 计算每个可执行文件上nm 输出的差异。 :

$ # Preparation
$ echo 'int main() { }' > mt.cpp
$ g++ -o mt.out mt.cpp
$ nm -j mt.out > mt.symbols
$
$ nm -j your_exe > your_exe.symbols
$ comm -23 your_exe.symbols mt.symbols
N
Dictionary::variable4
namespace1::variable1
variable0
variable10

关于c++ - 是否可以通过 NM 仅打印用户定义的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11935073/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com