我试图在Windows(visualstudio2010)上获取一个报告类类型的字符串,但没有任何成功。由于UnDecorateName不起作用,我正在使用boost库。#include#includeclassMyObject{};intmain(intargc,char**argv){MyObjecto;constchar*str=typeid(o).name();//str="classMyObject"std::stringdstr=boost::core::demangle(str);//dstr="classMyObject"return0;}我怎样才能从上面的代码中只得到
这个问题在这里已经有了答案:CanIobtainC++typenamesinaconstexprway?(3个答案)关闭去年。我想获取类型名称并将其打印出来以用于调试目的。我使用以下代码:#includeinlineconstchar*demangle(constchar*s){abi::__cxa_demangle(s,0,0,NULL);}templateinlineconstchar*type_name(){returndemangle(typeid(T).name());}它运行良好,但我认为它有不必要的运行时开销。有没有办法获得在编译时计算的人类可读形式的类型id?我正在考虑
作为构建过程的一部分,我们会在编译可执行文件时生成一个映射文件。例如:g++-Wl,-Map,/tmp/foo.map-ofoofoo.cpp为了尝试从GCC4.3/4.4迁移到GCC4.9,我们设置了一个新的构建服务器。4.9构建服务器生成的映射文件没有损坏的符号名称。4.3/4.4构建服务器生成的map文件可以。例如,用4.3运行上面的代码,我在map文件中截取了这个:.plt0x00000000004007000x90/usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../lib64/crt1.o0x0000000000400710_ZN
假设我有:try{externalLibrary::doSomething();}catch(std::exception&e){//yayIknowwhattodo}catch(...){//darn,I'venoideawhathappened!}在某些情况下,您可能会遇到异常,但您不知道异常来自何处或原因-在某些没有调试信息的外部库中。有没有办法找到抛出的东西,或者以其他方式获取与之相关的任何数据?他们可能正在做:throwmyStupidCustomString("hereissomereallyusefulinformation");但我永远不知道我是否捕获了...如果重要的
我正在寻找一个开源库来对Windows可执行文件符号名称进行分解。是否存在这样的事情,或者我必须使用Microsoft库? 最佳答案 呃,thisguy似乎已经成功了。 关于Windowsdemangling库,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3059355/
我有一段代码,其中我看到了__cxa_前缀。例如,以下摘录包含它:std::unique_ptrown(#ifndef_MSC_VERabi::__cxa_demangle(typeid(TR).name(),nullptr,nullptr,nullptr),#elsenullptr,#endifstd::free);我很乐意对cxa的含义进行一些解释。 最佳答案 这只是函数名,但可能是CXxAbi。 关于c++-"cxa"中的"__cxa_demangle"前缀是什么意思?,我们在St
有什么办法可以从g++中的demangledname中取回mangledname。例如,我的名称是func(char*,int),我应该怎么做才能得到重整的名称,即_Z4funcPci?我的问题是特定于g++的。 最佳答案 您可以简单地使用g++编译一个带有您需要的签名的空函数并从中提取名称。例如:echo"intf1(char*,int){}"|g++-xc++-S--o-|grep"^_.*:$"|sed-e's/:$//'给出输出_Z2f1Pci这是我认为你需要的。确保包含任何相关的头文件,因为它们会影响符号被破坏的方式。
有什么办法可以从g++中的demangledname中取回mangledname。例如,我的名称是func(char*,int),我应该怎么做才能得到重整的名称,即_Z4funcPci?我的问题是特定于g++的。 最佳答案 您可以简单地使用g++编译一个带有您需要的签名的空函数并从中提取名称。例如:echo"intf1(char*,int){}"|g++-xc++-S--o-|grep"^_.*:$"|sed-e's/:$//'给出输出_Z2f1Pci这是我认为你需要的。确保包含任何相关的头文件,因为它们会影响符号被破坏的方式。