<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">
<HTML>
<HEAD>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=UTF-8">
  <META NAME="GENERATOR" CONTENT="GtkHTML/4.6.6">
</HEAD>
<BODY>
The assertion failure in detail is this:<BR>
<BR>
(gdb) bt<BR>
#0  0x0000003675e35c39 in raise () from /lib64/libc.so.6<BR>
#1  0x0000003675e37348 in abort () from /lib64/libc.so.6<BR>
#2  0x0000003675e2eb96 in __assert_fail_base () from /lib64/libc.so.6<BR>
#3  0x0000003675e2ec42 in __assert_fail () from /lib64/libc.so.6<BR>
#4  0x00007fd956ee1e29 in lldb_private::Debugger::Debugger (this=0xd478f0, log_callback=0x0, baton=0x0)<BR>
    at /home/mg11/src/main/devtools/main/llvm/tools/lldb/source/Core/Debugger.cpp:649<BR>
#5  0x00007fd956ee13a3 in lldb_private::Debugger::CreateInstance (log_callback=0x0, baton=0x0)<BR>
    at /home/mg11/src/main/devtools/main/llvm/tools/lldb/source/Core/Debugger.cpp:530<BR>
#6  0x00007fd9572456de in lldb::SBDebugger::Create (source_init_files=0x1, callback=0x0, baton=0x0)<BR>
    at /home/mg11/src/main/devtools/main/llvm/tools/lldb/source/API/SBDebugger.cpp:172<BR>
#7  0x00007fd95724560d in lldb::SBDebugger::Create (source_init_files=0x1)<BR>
    at /home/mg11/src/main/devtools/main/llvm/tools/lldb/source/API/SBDebugger.cpp:153<BR>
#8  0x00000000004008d8 in main () at main.cpp:10<BR>
(gdb) fr 4<BR>
#4  0x00007fd956ee1e29 in lldb_private::Debugger::Debugger (this=0xd478f0, log_callback=0x0, baton=0x0)<BR>
    at /home/mg11/src/main/devtools/main/llvm/tools/lldb/source/Core/Debugger.cpp:649<BR>
649         assert (default_platform_sp.get());<BR>
(gdb) list<BR>
644         if (log_callback)<BR>
645             m_log_callback_stream_sp.reset (new StreamCallback (log_callback, baton));<BR>
646         m_command_interpreter_ap->Initialize ();<BR>
647         // Always add our default platform to the platform list<BR>
648         PlatformSP default_platform_sp (Platform::GetHostPlatform());<BR>
649         assert (default_platform_sp.get());<BR>
650         m_platform_list.Append (default_platform_sp, true);<BR>
651         <BR>
652         m_collection_sp->Initialize (g_properties);<BR>
653         m_collection_sp->AppendProperty (ConstString("target"),<BR>
(gdb) <BR>
<BR>
<BR>
<BR>
On Fri, 2014-10-03 at 13:46 +0100, Matthew Gardiner wrote:
<BLOCKQUOTE TYPE=CITE>
<PRE>
Hi folks,

Whilst starting to play with the lldb C++ API, I've noticed that this
simple little program causes an assertion failure (and hence a core
dump).

#include <cstdio>
#include "lldb/API/LLDB.h"

int main()
{
    fprintf(stderr, "lldb-app\n");
//  lldb::SBDebugger::Initialize();
    lldb::SBDebugger dbgr = lldb::SBDebugger::Create(true);
    fprintf(stderr, "SBDebugger::Create!\n");
    return 0;
}

As guessed, by uncommenting out the Initialize call, the assertion is
satisfied by Create and friends, and the code runs to completion.

To me, this is bad on 2 counts:

1. If Create depends on Initialize then Initialize should be called
internally.
2. From a public API perspective, even if Create and Initialize need to
be called separately, a crash (failed assert) seems a little harsh.
Shouldn't an error return (or exception throw) be used to communicate
the user's mistake in this case?

I did some digging into SBDebugger::Initialize and it seems safe for
this to be called internally by Create.

So I'm proposing that I fix this issue with following patch:

Index: source/API/SBDebugger.cpp
===================================================================
--- source/API/SBDebugger.cpp   (revision 218974)
+++ source/API/SBDebugger.cpp   (working copy)
@@ -159,6 +159,8 @@
 {
     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
 
+    Initialize();
+
     SBDebugger debugger;
     
     // Currently we have issues if this function is called
simultaneously on two different
@@ -210,6 +212,8 @@
                      sstr.GetData());
     }
 
+    Terminate();
+
     Debugger::Destroy (debugger.m_opaque_sp);
 
     if (debugger.m_opaque_sp.get() != NULL)


Please shout out if you don't want me to.

thanks
Matt




Member of the CSR plc group of companies. CSR plc registered in England and Wales, registered number 4187346, registered office Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, United Kingdom
More information can be found at <A HREF="http://www.csr.com">www.csr.com</A>. Keep up to date with CSR on our technical blog, <A HREF="http://www.csr.com/blog">www.csr.com/blog</A>, CSR people blog, <A HREF="http://www.csr.com/people">www.csr.com/people</A>, YouTube, <A HREF="http://www.youtube.com/user/CSRplc">www.youtube.com/user/CSRplc</A>, Facebook, <A HREF="http://www.facebook.com/pages/CSR/191038434253534">www.facebook.com/pages/CSR/191038434253534</A>, or follow us on Twitter at <A HREF="http://www.twitter.com/CSR_plc">www.twitter.com/CSR_plc</A>.
New for 2014, you can now access the wide range of products powered by aptX at <A HREF="http://www.aptx.com">www.aptx.com</A>.
_______________________________________________
lldb-dev mailing list
<A HREF="mailto:lldb-dev@cs.uiuc.edu">lldb-dev@cs.uiuc.edu</A>
<A HREF="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev">http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev</A>


 To report this email as spam click <A HREF="https://www.mailcontrol.com/sr/pilrSd6CXBDGX2PQPOmvUj!GOBh06pKKo4kkp2B6Y080nTmNNKVHT4SNd1RosIFWqz8LAxcsry5jDxGYc2QXWA==">https://www.mailcontrol.com/sr/pilrSd6CXBDGX2PQPOmvUj!GOBh06pKKo4kkp2B6Y080nTmNNKVHT4SNd1RosIFWqz8LAxcsry5jDxGYc2QXWA==</A> .
</PRE>
</BLOCKQUOTE>
<BR>
</BODY>
</HTML>