本文整理汇总了C++中DILineInfo::getFunctionName方法的典型用法代码示例。如果您正苦于以下问题:C++ DILineInfo::getFunctionName方法的具体用法?C++ DILineInfo::getFunctionName怎么用?C++ DILineInfo::getFunctionName使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DILineInfo
的用法示例。
在下文中一共展示了DILineInfo::getFunctionName方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: PrintDILineInfo
static void PrintDILineInfo(DILineInfo dli) {
if (PrintFunctions)
outs() << (dli.getFunctionName() ? dli.getFunctionName() : "<unknown>")
<< "\n";
outs() << (dli.getFileName() ? dli.getFileName() : "<unknown>") << ':'
<< dli.getLine() << ':' << dli.getColumn() << '\n';
}
示例2: lookup_pointer
void lookup_pointer(DIContext *context, const char **name, size_t *line, const char **filename, size_t pointer, int demangle, int *fromC)
{
DILineInfo info;
if (demangle && *name != NULL)
*name = jl_demangle(*name);
#ifdef LLVM35
DILineInfoSpecifier infoSpec(DILineInfoSpecifier::FileLineInfoKind::AbsoluteFilePath,
DILineInfoSpecifier::FunctionNameKind::ShortName);
#else
int infoSpec = DILineInfoSpecifier::FileLineInfo |
DILineInfoSpecifier::AbsoluteFilePath |
DILineInfoSpecifier::FunctionName;
#endif
if (context == NULL) goto done;
info = context->getLineInfoForAddress(pointer, infoSpec);
#ifndef LLVM35 // LLVM <= 3.4
if (strcmp(info.getFunctionName(), "<invalid>") == 0) goto done;
if (demangle)
*name = jl_demangle(info.getFunctionName());
else
*name = strdup(info.getFunctionName());
*line = info.getLine();
*filename = strdup(info.getFileName());
#else
if (strcmp(info.FunctionName.c_str(), "<invalid>") == 0) goto done;
*name = strdup(info.FunctionName.c_str());
*line = info.Line;
*filename = strdup(info.FileName.c_str());
#endif
done:
// If this is a jlcall wrapper, set fromC to match JIT behavior
if (*name == NULL || memcmp(*name,"jlcall_",7) == 0)
*fromC = true;
}
示例3: lookup_pointer
void lookup_pointer(DIContext *context, const char **name, int *line, const char **filename, size_t pointer, int demangle)
{
if (context == NULL) return;
#ifdef LLVM35
DILineInfoSpecifier infoSpec(DILineInfoSpecifier::FileLineInfoKind::AbsoluteFilePath,
DILineInfoSpecifier::FunctionNameKind::ShortName);
#else
int infoSpec = DILineInfoSpecifier::FileLineInfo |
DILineInfoSpecifier::AbsoluteFilePath |
DILineInfoSpecifier::FunctionName;
#endif
DILineInfo info = context->getLineInfoForAddress(pointer, infoSpec);
#ifndef LLVM35 // LLVM <= 3.4
if (strcmp(info.getFunctionName(), "<invalid>") == 0) return;
if (demangle)
*name = jl_demangle(info.getFunctionName());
else
*name = strdup(info.getFunctionName());
*line = info.getLine();
*filename = strdup(info.getFileName());
#else
if (strcmp(info.FunctionName.c_str(), "<invalid>") == 0) return;
*name = strdup(info.FunctionName.c_str());
*line = info.Line;
*filename = strdup(info.FileName.c_str());
#endif
}
示例4: printDILineInfo
std::string LLVMSymbolizer::printDILineInfo(DILineInfo LineInfo) const {
// By default, DILineInfo contains "<invalid>" for function/filename it
// cannot fetch. We replace it to "??" to make our output closer to addr2line.
static const std::string kDILineInfoBadString = "<invalid>";
std::stringstream Result;
if (Opts.PrintFunctions) {
std::string FunctionName = LineInfo.getFunctionName();
if (FunctionName == kDILineInfoBadString)
FunctionName = kBadString;
DemangleName(FunctionName);
Result << FunctionName << "\n";
}
std::string Filename = LineInfo.getFileName();
if (Filename == kDILineInfoBadString)
Filename = kBadString;
Result << Filename << ":" << LineInfo.getLine()
<< ":" << LineInfo.getColumn() << "\n";
return Result.str();
}
示例5: DumpInput
static void DumpInput(const StringRef &Filename) {
OwningPtr<MemoryBuffer> Buff;
if (error_code ec = MemoryBuffer::getFileOrSTDIN(Filename, Buff)) {
errs() << Filename << ": " << ec.message() << "\n";
return;
}
OwningPtr<ObjectFile> Obj(ObjectFile::createObjectFile(Buff.take()));
StringRef DebugInfoSection;
StringRef DebugAbbrevSection;
StringRef DebugLineSection;
StringRef DebugArangesSection;
StringRef DebugStringSection;
error_code ec;
for (section_iterator i = Obj->begin_sections(),
e = Obj->end_sections();
i != e; i.increment(ec)) {
StringRef name;
i->getName(name);
StringRef data;
i->getContents(data);
if (name.startswith("__DWARF,"))
name = name.substr(8); // Skip "__DWARF," prefix.
name = name.substr(name.find_first_not_of("._")); // Skip . and _ prefixes.
if (name == "debug_info")
DebugInfoSection = data;
else if (name == "debug_abbrev")
DebugAbbrevSection = data;
else if (name == "debug_line")
DebugLineSection = data;
else if (name == "debug_aranges")
DebugArangesSection = data;
else if (name == "debug_str")
DebugStringSection = data;
}
OwningPtr<DIContext> dictx(DIContext::getDWARFContext(/*FIXME*/true,
DebugInfoSection,
DebugAbbrevSection,
DebugArangesSection,
DebugLineSection,
DebugStringSection));
if (Address == -1ULL) {
outs() << Filename
<< ":\tfile format " << Obj->getFileFormatName() << "\n\n";
// Dump the complete DWARF structure.
dictx->dump(outs());
} else {
// Print line info for the specified address.
int spec_flags = DILineInfoSpecifier::FileLineInfo;
if (PrintFunctions)
spec_flags |= DILineInfoSpecifier::FunctionName;
DILineInfo dli = dictx->getLineInfoForAddress(Address, spec_flags);
if (PrintFunctions)
outs() << (dli.getFunctionName() ? dli.getFunctionName() : "<unknown>")
<< "\n";
outs() << (dli.getFileName() ? dli.getFileName() : "<unknown>") << ':'
<< dli.getLine() << ':' << dli.getColumn() << '\n';
}
}