<div dir="ltr">Implementing the explore command as a stateful command in the way I had envisioned it would be a bit different than the process attach example here, so it's not the best point of comparison.  What I imagined a session would go like is something like this:<div><br></div><div><div>(lldb) explore begin m_myclass_sp</div></div><div><std::shared_ptr<MyClass>> m_foo_sp</div><div>+ m_impl           +0x0   <Foo*><br></div><div>+ m_ref_count   +0x4    <int>       4<br></div><div><br></div><div>(lldb) explore follow m_impl</div><div><MyClass*> m_foo_sp->m_impl</div><div>+ member1        +0x0   <const char*>   "String value<br></div><div>+ member2        +0x4   <int>                10</div><div>+ member3        +0x8   <Bar*><br></div><div><br></div><div>(lldb) explore follow (Baz*)member_3</div><div><Baz*>  (Baz *)m_foo_sp->m_impl->member3</div><div>+ m_baz1         +0x0     <double>     3.5<br></div><div><br></div><div>(lldb) explore status</div><div><div style="font-size:13.1999998092651px;line-height:19.7999992370605px"><Baz*>  (Baz *)(m_foo_sp->m_impl->member3)</div><div style="font-size:13.1999998092651px;line-height:19.7999992370605px">+ m_baz1         +0x0     <double>     3.5</div></div><div style="font-size:13.1999998092651px;line-height:19.7999992370605px"><br></div><div style="font-size:13.1999998092651px;line-height:19.7999992370605px">(lldb) explore up</div><div style="font-size:13.1999998092651px;line-height:19.7999992370605px"><div style="font-size:13.1999998092651px;line-height:19.7999992370605px"><MyClass*> m_foo_sp->m_impl</div><div style="font-size:13.1999998092651px;line-height:19.7999992370605px">+ member1        +0x0   <const char*>   "String value<br></div><div style="font-size:13.1999998092651px;line-height:19.7999992370605px">+ module_addr   +0x4   <lldb::addr_t>    0x80f23490</div><div style="font-size:13.1999998092651px;line-height:19.7999992370605px">+ member3        +0x8   <Bar*></div><div style="font-size:13.1999998092651px;line-height:19.7999992370605px"><br></div><div style="font-size:13.1999998092651px;line-height:19.7999992370605px">(lldb) target modules lookup -a <span style="font-size:13.1999998092651px;line-height:19.7999992370605px">0x80f23490</span></div><div style="font-size:13.1999998092651px;line-height:19.7999992370605px"><span style="font-size:13.1999998092651px;line-height:19.7999992370605px">// Information about the module loaded at 0x80f23490 is dumped</span></div><div style="font-size:13.1999998092651px;line-height:19.7999992370605px"><span style="font-size:13.1999998092651px;line-height:19.7999992370605px"><br></span></div><div style="font-size:13.1999998092651px;line-height:19.7999992370605px"><span style="font-size:13.1999998092651px;line-height:19.7999992370605px">(lldb) explore stop</span></div><div style="font-size:13.1999998092651px;line-height:19.7999992370605px"><span style="font-size:13.1999998092651px;line-height:19.7999992370605px">(lldb)</span></div></div></div><br><div class="gmail_quote">On Thu, Feb 26, 2015 at 9:46 AM <<a href="mailto:jingham@apple.com">jingham@apple.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
> On Feb 26, 2015, at 6:57 AM, Siva Chandra <<a href="mailto:sivachandra@google.com" target="_blank">sivachandra@google.com</a>> wrote:<br>
><br>
> On Wed, Feb 25, 2015 at 6:36 PM,  <<a href="mailto:jingham@apple.com" target="_blank">jingham@apple.com</a>> wrote:<br>
>> I haven't used the gdb "explore".  It does seem a little odd to me,<br>
>> like something that is well modeled by a turn-down GUI variable<br>
>> display but not so much by this kind of question & answer session.<br>
>> But I haven't used it so I can't say.<br>
><br>
> My own point of view: I have hardly ever used an IDE or GUI for dev<br>
> work or debugging. Having a CLI for this would likely be of value to<br>
> people like me. However, I do agree that if one is using a GUI, this<br>
> should not be required. But would that GUI require to understand the<br>
> current source language? For example, it should be able to do produce<br>
> syntax for field access like a.b->c.d. May be its not an issue.<br>
<br>
It is driven by the SBValue system, it's up to that system to produce the notion of "child objects", then the GUI just reflects that.  The SBValue system clearly has to understand the source language.  You can even ask it "give me the expression that produced this child in the current source language, for instance if you then want to pass that value to an expression for some purpose.  But for basic data display the SBValue layout works fine.<br>
<br>
><br>
>> OTOH, I do have other uses for a slightly more advanced interactive<br>
>> IO handler.  For instance, it you do "process attach -n" and there are<br>
>> multiple processes with the same name, we show you a nice little<br>
>> listing of the processes and their arguments so you can figure out<br>
>> which PID you actually want to attach to.  But it would be nicer to say<br>
>> "here are these five processes, type the index of the one you want to<br>
>> attach to."<br>
><br>
> One could argue that this case can also be handled by a GUI more<br>
> effectively? :-)<br>
<br>
I wouldn't.<br>
<br>
><br>
>> Maybe you could also have "show me more about process 3" which<br>
>> could dump a more verbose output, and then you would decide to<br>
>> attach to 3...<br>
><br>
> So, do you envision this to happen in a single command "session", or<br>
> do you envision something like what Zach talked about: a command<br>
> retaining state across sessions. I am not a fan of keeping state<br>
> across sessions as managing state between two sessions could get<br>
> tricky and IMO not worth it for the command I have in mind.<br>
<br>
<br>
Again, I haven't thought about the best way to implement something like the "explore" command.  So I don't have an opinion about how to implement it.<br>
<br>
In the simple "pick from a list" version of selecting a process, it would also be a one-shot thing so statefulness isn't really relevant.  But if you imagine doing something like:<br>
<br>
(lldb) process attach -n Foo<br>
INDEX  PID ARGUMENTS<br>
1      111  foo bar<br>
2      222  foo bar bar<br>
Select a index to attach to (?<N> for more info) > ?1<br>
<More info on process 1><br>
Select a index to attach to (?<N> for more info) > ?2<br>
<More info on process 2><br>
Select a index to attach to (?<N> for more info) > 2<br>
Attaching to PID 222<br>
(lldb)<br>
<br>
Then making it a complete session is much more natural than having to come in & out of "process attach".<br>
<br>
Jim<br>
<br>
<br>
</blockquote></div>