[lldb-dev] Getting valid frames and odd plugin selection behaviour

arvid.picciani at nokia.com arvid.picciani at nokia.com
Mon Oct 4 08:45:01 PDT 2010

I'm trying to print a backtrace after a process stopped.
unfortunately i cant seen to use the frames at all, despite they're valid:

for(int i=0;i<m_process->GetNumThreads();i++) {
    lldb::SBThread t = m_process->GetThreadAtIndex(i);
    lldb::SBFrame fr = t.GetFrameAtIndex(0);
    fr.IsValid() --> true
    fr.GetFunction().isValid() --> false
    fr.GetBlock().isValid() --> false
    fr.GetCompileUnit().isValid() --> false

while attempting to print the highest frame t.GetFrameAtIndex(t.GetNumFrames()-1)
i got a bunch of crashes. one trace of the crash revealed that its trying to read memory through
the gdb remote process plugin, despite the process was started by the macos process plugin

In source/Target/Process.cpp   Process::FindPlugin :
the exact conditions there are unclear to me, all i know is that they are inconsistent across the 
debuggers lifetime, meaning it randomly picks an available plugin.
Also, if CanDebug returns false, it looks like the plugin instance is leaked?

After forcing the plugin to "process.macosx", I still get the same unusable frames though.
Should i use a different method there? Unfortunately the API does not match the internal command usage,
so i can only guess how this is meant to be used.

More information about the lldb-dev mailing list