[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