开发者

Is there an online name demangler for C++? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.

We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.

Closed 6 years ago.

开发者_如何学Go Improve this question

I'm getting a fairly long and confusing link error, and would love it if I could just paste it into some textbox on some website and have the names un-mangled for me.

Does anyone know of such a service?


I have created such an online serivice: https://demangler.com

This is a gcc c++ symbol demangler. You just copy a stack trace, or the output of nm into a text box, and it will return the output with the names demangled.

@Update: It now demangles MSVC and Java symbols also.


I created one based on this question. It works with the inputs I tried on, supports g++ and msvc++ via __cxa_demangle and __unDName, compiled to Javascript via Emscripten.

Here it is: c++filtjs.


Most (if not all) C++ compilers come with c++filt tool which does precisely what you apparently looking for.

If you want it at the mouse click... well write a GUI for it ;)


There are two copy-and-paste online solutions:

  • demangler.com, which supports GCC, Visual Studio, or Java symbols
  • c++filtjs, which supports GCC and Visual Studio but has problems with template parameters

If you only need support for GCC and Clang, you also have the option of using Coliru, which is probably the most versatile online C++ compiler.

This is not quite as simple as cut, paste, and click - but not too much harder - and it looks like there are no issues with template parameters as was noted above. You just need to modify the command line to run something like this:

cat main.cpp | c++filt -t

See it live with this example which demangles:

_Z6kernelIfLj3EEvPT_5arrayIPKS0_XT0_EES5_S2_IjXT0_EES6_S0_

to:

void kernel<float, 3u>(float*, array<float const*, 3u>, array<float const*, 3u>, array<unsigned int, 3u>, array<unsigned int, 3u>, float)
           ^^^^^^^^^^^


FYI, there's also a Ruby gem to demangle Borland/MS/whatever mangled names: unmangler

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜