[lldb-dev] Bug? in lldb/clang and expression evaluation

Filipe Cabecinhas filcab+lldb-dev at gmail.com
Fri Jul 29 12:23:00 PDT 2011


Thanks, I will be waiting for it.

  Filipe

On Fri, Jul 29, 2011 at 12:11, Greg Clayton <gclayton at apple.com> wrote:

> Sean Callanan has a patch that is coming that improves C++ expressions. We
> know of this issue and are currently working to resolve it. The fix should
> be landing in the next day or so.
>
> Greg Clayton
>
> On Jul 28, 2011, at 6:47 PM, Filipe Cabecinhas wrote:
>
> > Hi all,
> >
> > I'm trying to debug lldb to see where the active thread gets unselected,
> using my patch for the "frame return" command.
> >
> > But I'm having some problems. Most of the time, I can't evaluate C++
> expressions, like "m_threads[idx]" (missing symbol: …), or
> "process->GetSelectedThread()" (call is ambiguous, but no candidates are
> given).
> > Since I was having these errors, I tried checking out if I could find
> those candidates while clang parsed the AST.
> >
> > Right now, I'm running a test program in lldb in lldb in lldb… It's not
> that fun :-)
> >
> > I will stop the bottom debugger in CommandObjectThread.cpp:413 and, in
> the middle lldb, run the command:
> >     frame #0: 0x000000010031d875
> LLDB`CommandObjectThreadStepWithTypeAndScope::Execute(lldb_private::Args&,
> lldb_private::CommandReturnObject&) + 197 at CommandObjectThread.cpp:413
> >    410                else
> >    411                {
> >    412                    const uint32_t num_threads =
> process->GetThreadList().GetSize();
> > -> 413                    Thread *thread = NULL;
> >    414
> >    415                    if (command.GetArgumentCount() == 0)
> >    416                    {
> > 1) expr process->GetThreadList()
> >
> >
> > This command, normally, will error out with:
> > error: call to member function 'GetThreadList' is ambiguous
> > note: candidate function
> > note: candidate function
> > error: 1 errors parsing expression
> >
> > Not listing the candidate functions (as it should?). If I stop that lldb,
> I can't check the Diagnostic object (with the outermost lldb):
> >     frame #0: 0x000000010042b182
> LLDB`clang::CompilerInstance::getDiagnostics() const + 114 at
> CompilerInstance.h:254
> >    251          /// Get the current diagnostics engine.
> >    252          Diagnostic &getDiagnostics() const {
> >    253            assert(Diagnostics && "Compiler instance has no
> diagnostics!");
> > -> 254            return *Diagnostics;
> >    255          }
> >    256
> >    257          /// setDiagnostics - Replace the current diagnostics
> engine.
> > 0) expr *(Diagnostics.Obj)
> > Assertion failed: (D && "Cannot get layout of forward declarations!"),
> function getASTRecordLayout, file RecordLayoutBuilder.cpp, line 1835.
> > [1]    73430 illegal hardware instruction  lldb
> >
> > This triggers an assert and shuts down clang. I have built lldb with the
> debug version of llvm+clang, as it says on the docs/ folder.
> >
> > Shouldn't clang+lldb be able to get that information? Any clues on where
> the bug might lie? (clang? lldb?)
> >
> > Regards,nbsp; Filipe Cabecinhas
> >
> > P.S: XCode blows up, too, which shouldn't happen.
> > _______________________________________________
> > lldb-dev mailing list
> > lldb-dev at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20110729/06511ec2/attachment.html>


More information about the lldb-dev mailing list