我的程序有太多静态初始化程序和析构函数。我想摆脱他们所有人。所以我需要一种方法来找到它们。
在可执行文件上运行 nm 会得到如下结果: 0004bfc0t_Z41_静态_初始化_和_破坏_0ii
有没有一种好方法可以从包含 static_initializers 的位置获取文件列表?
您可以在目标文件上运行 nm,该文件稍后会链接到最终的可执行文件中。或者如果您有很多事情要做,请创建一个脚本来解析 nm 的输出。
根据数据的定义,您可能还会发现有重复项,这些重复项可以减少为一个对象。
如果您在 Windows 上使用 Microsoft Visual C++ 的 PDB 文件格式,则可以使用以下脚本:
llvm-pdbutil dump --globals file.pdb | awk '/addr = / { if (sym) { off = $0; sub(/.*addr = [0-9]*:/, "", off); syms[sym] = +off; inv[+off] = sym; } } { sym = ""; } /`.*`/ { sym = $0; sub(/`[ \t]*$/, "", sym); sub(/.*`/, "", sym); } END { for (k in inv) { if (syms["__xc_a"] < +k && +k < syms["__xc_z"]) { print(inv[k]); } } }'
它将打印所有 C++ 初始值设定项。