我正在开发一个调试/内存工具。我想显示来自 C++ 的符号,问题是它们非常冗长。目前我只是在使用__cxa_demangle
,但这通常会导致超过 500 个字符的巨大字符串,因为包含默认模板参数。
clang++
当它报告符号时可以清楚地做聪明的事情,有什么办法可以利用它吗?
作为一个简单的例子,我们来看:
std::map<std::string const, unsigned int, std::less<std::string const>, std::allocator<std::pair<std::string const, unsigned int> > >::find(std::string const&)
这显然可以报告为:
std::map<std::string const, unsigned int>::find(std::string const&)
..如果我有一个足够聪明的工具。很明显,如果没有额外的知识(比如最初使用的包含 - 我可能会得到这些),这通常很难做到,但我会很感激任何指针。
到目前为止,我一直指向libcxxabi,但除了没有解析树的公共接口(它本身不会阻止我)之外,似乎我必须努力确定哪些参数是默认值. 如果我能以某种方式欺骗 clang 为我做这件事,那就太好了。