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

Greg Clayton gclayton at apple.com
Fri Jul 29 12:11:56 PDT 2011


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





More information about the lldb-dev mailing list