问题标签 [c++filt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
230 浏览

c++ - 我可以在不编译任何东西的情况下修改 C++ 名称吗?

C++ 编译器会混淆名称(或者更确切地说是签名),因为在 C++ 中,函数或变量的相同名称可以被重载(例如,不同的参数、不同的命名空间、不同的模板参数)。

现在,我们都知道并喜欢对c++filt名称(例如,来自标准输入)进行解码的实用程序——无需使用编译器基础设施。但是我可以做相反的事情,即在不编译任何代码的情况下修改名称吗?

假设我只是在标准输入上输入了签名,一次一行或任何方便的方式。输入不包含任何宏、表达式或任何类似的东西。与这个问题不同,我想要的答案不涉及编译代码,也不使用编译器的基础结构来排序编译它。

0 投票
1 回答
269 浏览

c++ - c++filt 对于 PTX 文件中的某些损坏名称不够激进

我正在通过 c++filt 过滤我编译的 PTX,但它只会破坏一些名称/标签并保留一些原样。例如,这个:

被分解为:

而不是至少这个:

我意识到 c++filt 没有明确支持 CUDA PTX;但请注意,未分解的名称与示例中的已分解名称的区别仅在于添加_param_0_param_1后缀(还有一个问题是应该如何分解这些名称的前缀,但让我们忘记这一点)。

  • 我可以做些什么来强制 c++filt 也适用于参数名称/标签吗?更一般地说,对于 PTX 文件中所有损坏的 C++ 名称?
  • 除了它已经具有的“格式”([-s|--format {none,auto,gnu,lucid,arm,hp,edg,gnu-v3,java,gnat,dlang}])之外,是否有可能/容易通过对 CUDA“格式”的认识来增强 c++filt?
  • 如果 c++filt 在这种情况下不能使用或不能适应使用,我应该如何进行解构?
0 投票
1 回答
789 浏览

c++ - 我的 c++filt 似乎无法正常工作,没有输出更改

在我的 linux 上,我有一个 .cpp 文件

我编译了它并将二进制文件串起来,尝试对函数名进行分解:

好吧,它似乎没有像我预期的那样工作。我这里有什么问题吗?我是否必须添加一些字母或删除一些字母才能使其工作?

请注意,这些名称是 clang 符号,似乎 c++filt 仅适用于我的 gcc 版本?或者 c++filt 应该有更新的版本来支持这两个编译器?

0 投票
1 回答
215 浏览

unix - 使用 SED、ECHO 和 C++FILT 去除 txt 文件中的所有 c++ 符号

考虑一个具有以下内容的输入文件:

需要在输入 txt 文件中搜索损坏的符号并将其替换为它们的去错名称,并将其打印为输出,如下所示:

假设没有其他行将有逗号后跟下划线。因此,我可以使用 ",(_.*)" 来捕获 input.txt 文件中的损坏符号。

当我在 tcsh shell 中使用以下命令时,它不起作用。输出仍然与 input.txt 相同。我无法解释为什么。

命令有什么问题?

0 投票
1 回答
47 浏览

c++ - 任何从 c++filt demangled 输出中获取更多信息的方式

c++filt当我遇到重复的符号错误时,我只是跑去demangle:

但实际的函数看起来像这样[在uiuc命名空间内]:

我怎样才能得到解耦的输出到

  1. 显示返回类型:std::ostream &
  2. 显示std::ostream而不是 std::__1::basic_ostream<char, std::__1::char_traits<char> >&. __之后std::是我没有得到的权利和类似模板的输入。ostream 是作为模板实现的吗?

我问是因为我无法轻松映射其他返回转弯类型。我正在处理一个用于练习的小文件。

我正在运行macOS并尝试了c++filt --format编译器的不同选项,但没有看到任何给我不同输出的选项。

0 投票
1 回答
74 浏览

c++ - C++ 过滤器不起作用。C++ 名称拆解

链接映射文件中的符号

使用 c++flit:

结果:

__ZZZZZZZZZZN5kinda16FillCardInfoPage6renderEvENK3

我认为这个符号是一个未命名的 lambda 类型。我们能得到真正的范围和原始名称吗?

0 投票
0 回答
74 浏览

c++ - 是否可以在运行时破坏类型名?

通过使用c++filt -t命令,我可以将名称分解为正确的类型名称(例如St3foo-> std::foo

有没有办法扭转这个事情,所以我可以St3foo通过打字得到std::foo

我唯一能想到的就是使用typeid(<expr>).name(),但我必须在运行时输入任何类型名,这样我才能得到以下损坏的名称。

(注意:我在 Windows 上使用 GCC 编译器)

0 投票
1 回答
93 浏览

c++ - 库中的符号名称解包失败(nm、objdump、c++filt)

我注意到我的输出中有未解组的函数,perf script并且最初认为perf可能做错了什么。
但是,更深入地研究一些*.so文件,我已经能够用c++filt -tnm -C和重现问题objdump -D -C

我对拆解过程中可能出现的问题有点迷茫。
没有被破坏的符号之一是:

该库是用 GCC 10.1 编译的。但是如果我用 clang 11 编译,我可以在objdump -D -C.

我现在有点死胡同,所以任何关于我可能检查的建议都会非常感激。:)

0 投票
0 回答
35 浏览

c++ - nm 和 c++filter 不能解开很长的损坏的 c++ 名称?

在试验 c++ 模板元编程时,我构造了一个递归定义的模板类型,如果递归深度大于 4,这使得类型名称非常长(~4600 字节),nm -C并且c++filt不能对长名称进行分解。这是用于解构的底层库的限制nm和/或限制吗?c++filt

编辑:在我发布了这个问题之后,我在我的 MacBook 上尝试了同样的事情,结果发现 MacOs、nm 和 c++filt 对这个很长的损坏名称正常工作。