首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >函数如何获得(真实)名称?

函数如何获得(真实)名称?
EN

Stack Overflow用户
提问于 2015-01-20 04:24:05
回答 3查看 2.7K关注 0票数 2

我有一个对象callInst.How,我可以取函数的实名,而不是IR代码中的名称?如果我在我的pass中运行这段代码( 无用在另一个问题中发布)

代码语言:javascript
运行
AI代码解释
复制
StringRef get_function_name(CallInst *call)
{
Function *fun = call->getCalledFunction();
if (fun) 
    return call->getName(); 
else
    return StringRef("indirect call");
}    

这给了我IR代码的名称(例如,call,call1,call2),.I想要有callInst的实名(printf,foo,main)。

有什么想法吗?

非常感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-23 01:48:51

它比要求的逻辑简单得多,我只是打印callinst的名称,而不是真正调用函数的值。

代码语言:javascript
运行
AI代码解释
复制
StringRef get_function_name(CallInst *call)
{
Function *fun = call->getCalledFunction();
if (fun) 
    return fun->getName(); //here i would take fun and not call! 
else
    return StringRef("indirect call");
}    

现在一切都好了!

代码语言:javascript
运行
AI代码解释
复制
errs()<<fun->getName().str()<<"\n";

我要取真名!我希望我能帮助那些有同样问题的人.

票数 1
EN

Stack Overflow用户

发布于 2015-01-20 06:51:03

你得到了什么--这个函数的坏名字。你必须解开它才能拿回“真实”的名字。我假设您正在linux上工作,并使用clang生成您的IR (因为您的问题上有clang标记)。在linux上,您可以使用

代码语言:javascript
运行
AI代码解释
复制
#include <iostream>
#include <memory>
#include <string>
#include <cxxabi.h>
using namespace std;

inline std::string demangle(const char* name) 
{
        int status = -1; 

        std::unique_ptr<char, void(*)(void*)> res { abi::__cxa_demangle(name, NULL, NULL, &status), std::free };
        return (status == 0) ? res.get() : std::string(name);
}

int main() {
    cout << demangle("mangled name here");
    return 0;
}

若要拆分函数的名称,请执行以下操作。

票数 3
EN

Stack Overflow用户

发布于 2015-01-20 19:29:39

作为对@Michael答案的补充,助推通过构造boost::typeindex::type_id_with_cvr为被蒙蔽的名字提供了更好的表示。

代码语言:javascript
运行
AI代码解释
复制
type_index ti = type_id_with_cvr<int&>();
std::cout << ti.pretty_name();  // Outputs 'int&' 

详情请参见教程

但是请记住,这仅用于调试目的,因为LLVM IR names不能保证与字体端源代码相同,甚至允许删除一些internal函数名。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28045339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文