Thanks for the tip. It works fine for 'string' types But for simple types (e.g. 'int') GetSummary() returns an empty string.. :/
So I ended up writing this little method: http://pastebin.com/pj0znv9j Which seems to work fine for me (ofcourse, I will know more when I upload the pre-release to my testers) Thanks On Tue, Apr 8, 2014 at 9:04 PM, <[email protected]> wrote: > That is what the Summary is for. The Summary, if it exists, is the > preferred "interpreted" presentation of the data held by the SBValue. So > for a char *, the Value is the pointer value, but the Summary is the > c-string contents. > > Jim > > On Apr 8, 2014, at 10:57 AM, Eran Ifrah <[email protected]> wrote: > > > Hello Enrico / All, > > > > I debugged it and it seems like a bug in my code. > > To get the frame locals (function args and locals) I was using this call: > > > > frame.GetBlock().GetVariables() > > > > While I should have simply call to frame.GetVariables() > > Which fixes the problem. > > > > However, I am facing another issue: > > It seems like the function "const char* SBValue::GetValue()" returns the > pointer address as string instead of the actual content > > > > Any quick way to get the data as an actual c-str? > > > > For example: > > > > int main(int argc, char** argv) { > > return 0; > > } > > > > My lldb UI for the "locals" view looks like this (best viewed in > monospace font ;)) : > > > > > -------------------------------------------------------------------------------- > > name | type | value > > > -------------------------------------------------------------------------------- > > argc | int | 1 > > argv | const char** | 0xfffffab123 (some random address) > > | | | > > +-*argv | const char* | 0xfffffab124 (some other address) > > | | | > > +- **argv| char | '/' > > > > In the code, I can identify that *argv is of type lldb::eBasicType*Char, > however, I can't find a way to extract the string itself (it should be > "/home/eran/test/TestLLDB") > > > > Any hints? > > > > Thanks! > > > > > > > > > > On Mon, Apr 7, 2014 at 5:31 AM, Eran Ifrah <[email protected]> wrote: > > Thanks, will debug this and see where it fails > > > > Eran > > > > > > On Mon, Apr 7, 2014 at 1:43 AM, Enrico Granata <[email protected]> > wrote: > > Yeah the const char* definitely should have a value. > > I am guessing the variable is in scope all right. Does it have a summary > if you ask for that? > > Does the same API call work if you stop directly within LLDB and use the > Python API? > > More context (e.g. a repro case) would also help - or maybe if you can > step through the LLDB code and see where we fail. If these are just frame > locals I expect the relevant code to be in ValueObject.cpp GetValueAsCString > > > > Sent from the iPhone of > > Enrico Granata <egranata@🍎.com> > > > > On Apr 6, 2014, at 12:26 PM, Eran Ifrah <[email protected]> wrote: > > > >> One of the local variables was 'const char*' so I would expect it to > have a value and others were of type of 'wxString' > >> In the UI I expanded all the way to the _M_data which is of type > 'wchar_t*' - and still nothing > >> > >> Eran > >> > >> > >> > >> On Sun, Apr 6, 2014 at 9:13 PM, Enrico Granata <[email protected]> > wrote: > >> What is the data type of your variables? > >> > >> If they are aggregate types (structs, classes, ...) they won't have a > value. > >> > >> Only basic types (int, float, char, ..., you get the idea - and > pointers) have a value. > >> > >> For other types, they might have a summary, or they might have > children, but definitely no value. > >> > >> Sent from the iPhone of > >> Enrico Granata <egranata@🍎.com> > >> > >> On Apr 6, 2014, at 7:02 AM, Eran Ifrah <[email protected]> wrote: > >> > >>> Hello all, > >>> > >>> I am at a phase where I want to display the current frame local > variables whenever the debugger "stops" > >>> I was able to get a list of the selected frame's variables in the > following manner: > >>> > >>> lldb::SBFrame frame = > m_target.GetProcess().GetSelectedThread().GetSelectedFrame(); > >>> ... > >>> lldb::SBValueList args = frame.GetBlock().GetVariables(m_target, true, > true, false); > >>> for(size_t i=0; i<args.GetSize(); ++i) { > >>> lldb::SBValue value = args.GetValueAtIndex(i); > >>> if ( value.IsValid() ) { > >>> LLDBLocalVariable::Ptr_t var( new LLDBLocalVariable(value) > ); > >>> locals.push_back( var ); > >>> } > >>> } > >>> > >>> Now, LLDBLocalVariable is a thin wrapper class for UI purposes. > >>> What it does is basically copies values from lldb::SBValue: > >>> > >>> LLDBLocalVariable::LLDBLocalVariable(lldb::SBValue value) { > >>> SetName( value.GetName() ); > >>> SetType( value.GetTypeName() ); > >>> SetValue( value.GetValue() ); // always returns null > >>> ... // code that handles children of value > >>> } > >>> > >>> value.GetName() and value.GetTypeName() are working as expected (i.e. > I get the correct type name and its name) > >>> However, I can't get the value as "string". I was naive enough to > think that const char* SBValue::GetValue() will do the trick... but this > always returns NULL. > >>> > >>> Any suggestions on what am I doing wrong? an example on how to extract > the variable's value in string format will be really appreciated > >>> > >>> Thanks, > >>> > >>> P.S. > >>> This is Linux 13.10 / 64 bit > >>> Self compiled lldb > >>> > >>> -- > >>> Eran Ifrah > >>> Author of codelite, a cross platform open source C/C++ IDE: > http://www.codelite.org > >>> wxCrafter, a wxWidgets RAD: http://wxcrafter.codelite.org > >>> _______________________________________________ > >>> lldb-dev mailing list > >>> [email protected] > >>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev > >> > >> > >> > >> -- > >> Eran Ifrah > >> Author of codelite, a cross platform open source C/C++ IDE: > http://www.codelite.org > >> wxCrafter, a wxWidgets RAD: http://wxcrafter.codelite.org > > > > > > > > -- > > Eran Ifrah > > Author of codelite, a cross platform open source C/C++ IDE: > http://www.codelite.org > > wxCrafter, a wxWidgets RAD: http://wxcrafter.codelite.org > > > > > > > > -- > > Eran Ifrah > > Author of codelite, a cross platform open source C/C++ IDE: > http://www.codelite.org > > wxCrafter, a wxWidgets RAD: http://wxcrafter.codelite.org > > _______________________________________________ > > lldb-dev mailing list > > [email protected] > > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev > > -- Eran Ifrah Author of codelite, a cross platform open source C/C++ IDE: http://www.codelite.org wxCrafter, a wxWidgets RAD: http://wxcrafter.codelite.org
_______________________________________________ lldb-dev mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
