char * formatBreakpoint (StringB &breakpointdescB, SBBreakpoint breakpoint, STATE *pstate) { logprintf (LOG_TRACE, "formatBreakpoint (0x%x, 0x%x, 0x%x)\n", &breakpointdescB, &breakpoint, pstate); // 18^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x00000001000/00f58", // func="main",file="../Sources/tests.cpp",fullname="/pro/runtime-EclipseApplication/tests/Sources/tests.cpp", // line="17",thread-groups=["i1"],times="0",original-location="/pro/runtime-EclipseApplication/tests/Sources/tests.cpp:17"} int bpid = breakpoint.GetID(); SBBreakpointLocation location = breakpoint.GetLocationAtIndex(0); SBAddress addr = location.GetAddress(); uint32_t file_addr=addr.GetFileAddress(); SBFunction function=addr.GetFunction(); const char *func_name=function.GetName(); SBLineEntry line_entry=addr.GetLineEntry(); SBFileSpec filespec = line_entry.GetFileSpec(); const char *filename=filespec.GetFilename(); char filepath[PATH_MAX]; snprintf (filepath, sizeof(filepath), "%s/%s", filespec.GetDirectory(), filename); uint32_t line=line_entry.GetLine(); const char *dispose = (breakpoint.IsOneShot())? "del": "keep"; const char *originallocation = ""; // originallocation,dispose = breakpoints[bpid] breakpointdescB.catsprintf ( "{number=\"%d\",type=\"breakpoint\",disp=\"%s\",enabled=\"y\",addr=\"0x%016x\"," "func=\"%s\",file=\"%s\",fullname=\"%s\",line=\"%d\"," "thread-groups=[\"%s\"],times=\"0\",original-location=\"%s\"}", bpid,dispose,file_addr,func_name,filename, filepath,line,pstate->threadgroup,originallocation); return breakpointdescB.c_str(); }
void SBAttachInfo::SetExecutable (SBFileSpec exe_file) { if (exe_file.IsValid()) m_opaque_sp->GetExecutableFile() = exe_file.ref(); else m_opaque_sp->GetExecutableFile().Clear(); }
SBError SBPlatform::Install (SBFileSpec &src, SBFileSpec &dst) { return ExecuteConnected( [&](const lldb::PlatformSP& platform_sp) { if (src.Exists()) return platform_sp->Install(src.ref(), dst.ref()); Error error; error.SetErrorStringWithFormat("'src' argument doesn't exist: '%s'", src.ref().GetPath().c_str()); return error; }); }
SBError SBPlatform::Get (SBFileSpec &src, SBFileSpec &dst) { SBError sb_error; PlatformSP platform_sp(GetSP()); if (platform_sp) { sb_error.ref() = platform_sp->GetFile(src.ref(), dst.ref()); } else { sb_error.SetErrorString("invalid platform"); } return sb_error; }
void SBLaunchInfo::SetExecutableFile(SBFileSpec exe_file, bool add_as_first_arg) { LLDB_RECORD_METHOD(void, SBLaunchInfo, SetExecutableFile, (lldb::SBFileSpec, bool), exe_file, add_as_first_arg); m_opaque_sp->SetExecutableFile(exe_file.ref(), add_as_first_arg); }
uint32_t SBCompileUnit::FindSupportFileIndex(uint32_t start_idx, const SBFileSpec &sb_file, bool full) { if (m_opaque_ptr) { FileSpecList &support_files = m_opaque_ptr->GetSupportFiles(); return support_files.FindFileIndex(start_idx, sb_file.ref(), full); } return 0; }
SBError SBPlatform::Put (SBFileSpec &src, SBFileSpec &dst) { return ExecuteConnected( [&](const lldb::PlatformSP& platform_sp) { if (src.Exists()) { uint32_t permissions = src.ref().GetPermissions(); if (permissions == 0) { if (src.ref().GetFileType() == FileSpec::eFileTypeDirectory) permissions = eFilePermissionsDirectoryDefault; else permissions = eFilePermissionsFileDefault; } return platform_sp->PutFile(src.ref(), dst.ref(), permissions); } Error error; error.SetErrorStringWithFormat("'src' argument doesn't exist: '%s'", src.ref().GetPath().c_str()); return error; }); }
SBFileSpec::SBFileSpec (const SBFileSpec &rhs) : m_opaque_ap() { LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); if (rhs.m_opaque_ap.get()) m_opaque_ap.reset (new FileSpec (rhs.get())); if (log) { SBStream sstr; GetDescription (sstr); log->Printf ("SBFileSpec::SBFileSpec (const SBFileSpec rhs.ap=%p) => SBFileSpec(%p): %s", rhs.m_opaque_ap.get(), m_opaque_ap.get(), sstr.GetData()); } }
size_t SBSourceManager::DisplaySourceLinesWithLineNumbers ( const SBFileSpec &file, uint32_t line, uint32_t context_before, uint32_t context_after, const char *current_line_cstr, SBStream &s ) { if (m_opaque_ap.get() == NULL) return 0; return m_opaque_ap->DisplaySourceLinesWithLineNumbers (file.ref(), line, context_before, context_after, current_line_cstr, s.get()); }
uint32_t SBFileSpecList::FindFileIndex(uint32_t idx, const SBFileSpec &sb_file, bool full) { return m_opaque_ap->FindFileIndex(idx, sb_file.ref(), full); }
bool SBFileSpecList::AppendIfUnique(const SBFileSpec &sb_file) { return m_opaque_ap->AppendIfUnique(sb_file.ref()); }
void SBFileSpecList::Append(const SBFileSpec &sb_file) { m_opaque_ap->Append(sb_file.ref()); }
char * formatFrame (StringB &framedescB, SBFrame frame, FrameDetails framedetails) { logprintf (LOG_TRACE, "formatFrame (0x%x, 0x%x, 0x%x)\n", &framedescB, &frame, framedetails); int frameid = frame.GetFrameID(); SBAddress addr = frame.GetPCAddress(); uint32_t file_addr = addr.GetFileAddress(); SBFunction function = addr.GetFunction(); char levelstring[NAME_MAX]; if (framedetails&WITH_LEVEL) snprintf (levelstring, sizeof(levelstring), "level=\"%d\",", frameid); else levelstring[0] = '\0'; const char *modulefilename = ""; SBModule module = frame.GetModule(); if (module.IsValid()) { SBFileSpec modulefilespec = module.GetPlatformFileSpec(); modulefilename = modulefilespec.GetFilename(); } const char *func_name="??"; static StringB argsstringB(LINE_MAX); argsstringB.clear(); if (function.IsValid()) { const char *filename, *filedir; int line = 0; func_name = function.GetName(); SBLineEntry line_entry = addr.GetLineEntry(); SBFileSpec filespec = line_entry.GetFileSpec(); filename = filespec.GetFilename(); filedir = filespec.GetDirectory(); line = line_entry.GetLine(); if (framedetails&WITH_ARGS) { SBValueList args = frame.GetVariables(1,0,0,0); static StringB argsdescB(LINE_MAX); argsdescB.clear(); SBFunction function = frame.GetFunction(); formatVariables (argsdescB, args); argsstringB.catsprintf ("%sargs=[%s]", (framedetails==JUST_LEVEL_AND_ARGS)?"":",", argsdescB.c_str()); } if (framedetails==JUST_LEVEL_AND_ARGS) framedescB.catsprintf ("frame={%s%s}", levelstring, argsstringB.c_str()); else framedescB.catsprintf ("frame={%saddr=\"0x%016x\",func=\"%s\"%s,file=\"%s\"," "fullname=\"%s/%s\",line=\"%d\"}", levelstring,file_addr,func_name,argsstringB.c_str(),filename,filedir,filename,line); } else { if (framedetails&WITH_ARGS) argsstringB.catsprintf ("%sargs=[]", (framedetails==JUST_LEVEL_AND_ARGS)?"":","); if (framedetails==JUST_LEVEL_AND_ARGS) framedescB.catsprintf ("frame={%s%s}", levelstring, argsstringB.c_str()); else { func_name = frame.GetFunctionName(); framedescB.catsprintf ("frame={%saddr=\"0x%016x\",func=\"%s\"%s,file=\"%s\"}", levelstring, file_addr, func_name, argsstringB.c_str(), modulefilename); } } return framedescB.c_str(); }