[Lldb-commits] [lldb] r107287 - in /lldb/trunk: include/lldb/API/SBDebugger.h include/lldb/Core/Debugger.h scripts/Python/append-debugger-id.py scripts/Python/build-swig-Python.sh scripts/lldb.swig source/API/SBDebugger.cpp source/Core/Debugger.cpp source/Interpreter/ScriptInterpreterPython.cpp
Johnny Chen
johnny.chen at apple.com
Wed Jun 30 12:19:14 PDT 2010
Hi Caroline,
Is the following usage of FindDebuggerWithID() correct?
Does SBDebugger.Initialize() need to make sure that lldb.debugger_unique_id is sane?
python
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import lldb
import lldb
>>> lldb.SBDebugger.Initialize()
lldb.SBDebugger.Initialize()
>>> dbg = lldb.SBDebugger.FindDebuggerWithID(lldb.debugger_unique_id)
dbg = lldb.SBDebugger.FindDebuggerWithID(lldb.debugger_unique_id)
>>> ci = dbg.GetCommandInterpreter()
ci = dbg.GetCommandInterpreter()
>>> res = res = lldb.SBCommandReturnObject()
res = res = lldb.SBCommandReturnObject()
>>> dbg.SetAsync(False)
dbg.SetAsync(False)
>>> ci.HandleCommand("help", res)
ci.HandleCommand("help", res)
6
>>> dbg.IsValid()
dbg.IsValid()
False
>>>
On Jun 30, 2010, at 9:22 AM, Caroline Tice wrote:
> Author: ctice
> Date: Wed Jun 30 11:22:25 2010
> New Revision: 107287
>
> URL: http://llvm.org/viewvc/llvm-project?rev=107287&view=rev
> Log:
> Add a unique ID to each debugger instance.
> Add functions to look up debugger by id
> Add global variable to lldb python module, to hold debugger id
> Modify embedded Python interpreter to update the global variable with the
> id of its current debugger.
> Modify the char ** typemap definition in lldb.swig to accept 'None' (for NULL)
> as a valid value.
>
> The point of all this is so that, when you drop into the embedded interpreter
> from the command interpreter (or when doing Python-based breakpoint commands),
> there is a way for the Python side to find/get the correct debugger
> instance ( by checking debugger_unique_id, then calling
> SBDebugger::FindDebuggerWithID on it).
>
>
> Added:
> lldb/trunk/scripts/Python/append-debugger-id.py
> Modified:
> lldb/trunk/include/lldb/API/SBDebugger.h
> lldb/trunk/include/lldb/Core/Debugger.h
> lldb/trunk/scripts/Python/build-swig-Python.sh
> lldb/trunk/scripts/lldb.swig
> lldb/trunk/source/API/SBDebugger.cpp
> lldb/trunk/source/Core/Debugger.cpp
> lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp
>
> Modified: lldb/trunk/include/lldb/API/SBDebugger.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBDebugger.h?rev=107287&r1=107286&r2=107287&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/API/SBDebugger.h (original)
> +++ lldb/trunk/include/lldb/API/SBDebugger.h Wed Jun 30 11:22:25 2010
> @@ -129,6 +129,9 @@
> void
> PushInputReader (lldb::SBInputReader &reader);
>
> + static SBDebugger
> + FindDebuggerWithID (int id);
> +
> private:
>
> // Use the static function: SBDebugger::Create();
>
> Modified: lldb/trunk/include/lldb/Core/Debugger.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/Debugger.h?rev=107287&r1=107286&r2=107287&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Core/Debugger.h (original)
> +++ lldb/trunk/include/lldb/Core/Debugger.h Wed Jun 30 11:22:25 2010
> @@ -21,6 +21,7 @@
> #include "lldb/Core/Listener.h"
> #include "lldb/Core/StreamFile.h"
> #include "lldb/Core/SourceManager.h"
> +#include "lldb/Core/UserID.h"
> #include "lldb/Target/ExecutionContext.h"
> #include "lldb/Target/TargetList.h"
>
> @@ -32,7 +33,8 @@
> ///
> /// Provides a global root objects for the debugger core.
> //----------------------------------------------------------------------
> -class Debugger
> +class Debugger :
> + public UserID
> {
> public:
>
> @@ -139,6 +141,9 @@
> void
> UpdateExecutionContext (ExecutionContext *override_context);
>
> + static lldb::DebuggerSP
> + FindDebuggerWithID (lldb::user_id_t id);
> +
> protected:
>
> static void
> @@ -165,7 +170,7 @@
>
> std::stack<lldb::InputReaderSP> m_input_readers;
> std::string m_input_reader_data;
> -
> +
> private:
>
> // Use Debugger::CreateInstance() to get a shared pointer to a new
>
> Added: lldb/trunk/scripts/Python/append-debugger-id.py
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/Python/append-debugger-id.py?rev=107287&view=auto
> ==============================================================================
> --- lldb/trunk/scripts/Python/append-debugger-id.py (added)
> +++ lldb/trunk/scripts/Python/append-debugger-id.py Wed Jun 30 11:22:25 2010
> @@ -0,0 +1,27 @@
> +#
> +# append-debugger-id.py
> +#
> +# This script adds a global variable, 'debugger_unique_id' to the lldb
> +# module (which was automatically generated via running swig), and
> +# initializes it to 0.
> +#
> +
> +import sys
> +
> +if len (sys.argv) != 2:
> + output_name = "./lldb.py"
> +else:
> + output_name = sys.argv[1] + "/lldb.py"
> +
> +# print "output_name is '" + output_name + "'"
> +
> +try:
> + f_out = open (output_name, 'a')
> +except IOError:
> + print "Error: Unable to open file for appending: " + output_name
> +else:
> + f_out.write ("debugger_unique_id = 0\n");
> + try:
> + f_out.close()
> + except IOError:
> + print "Error occurred while close file."
>
> Modified: lldb/trunk/scripts/Python/build-swig-Python.sh
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/Python/build-swig-Python.sh?rev=107287&r1=107286&r2=107287&view=diff
> ==============================================================================
> --- lldb/trunk/scripts/Python/build-swig-Python.sh (original)
> +++ lldb/trunk/scripts/Python/build-swig-Python.sh Wed Jun 30 11:22:25 2010
> @@ -127,3 +127,10 @@
>
> swig -c++ -shadow -python -I"${SRC_ROOT}/include" -I./. -outdir "${CONFIG_BUILD_DIR}" -o "${swig_output_file}" "${swig_input_file}"
>
> +# Append global variable to lldb Python module.
> +
> +current_dir=`pwd`
> +if [ -f "${current_dir}/append-debugger-id.py" ]
> +then
> + python ${current_dir}/append-debugger-id.py ${CONFIG_BUILD_DIR}
> +fi
>
> Modified: lldb/trunk/scripts/lldb.swig
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/lldb.swig?rev=107287&r1=107286&r2=107287&view=diff
> ==============================================================================
> --- lldb/trunk/scripts/lldb.swig (original)
> +++ lldb/trunk/scripts/lldb.swig Wed Jun 30 11:22:25 2010
> @@ -43,6 +43,8 @@
> }
> }
> $1[i] = 0;
> + } else if ($input == Py_None) {
> + $1 = NULL;
> } else {
> PyErr_SetString(PyExc_TypeError,"not a list");
> return NULL;
>
> Modified: lldb/trunk/source/API/SBDebugger.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBDebugger.cpp?rev=107287&r1=107286&r2=107287&view=diff
> ==============================================================================
> --- lldb/trunk/source/API/SBDebugger.cpp (original)
> +++ lldb/trunk/source/API/SBDebugger.cpp Wed Jun 30 11:22:25 2010
> @@ -51,7 +51,6 @@
> return debugger;
> }
>
> -
> SBDebugger::SBDebugger () :
> m_opaque_sp ()
> {
> @@ -549,3 +548,12 @@
> }
>
>
> +SBDebugger
> +SBDebugger::FindDebuggerWithID (int id)
> +{
> + SBDebugger sb_debugger;
> + lldb::DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id);
> + if (debugger_sp)
> + sb_debugger.reset (debugger_sp);
> + return sb_debugger;
> +}
>
> Modified: lldb/trunk/source/Core/Debugger.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Debugger.cpp?rev=107287&r1=107286&r2=107287&view=diff
> ==============================================================================
> --- lldb/trunk/source/Core/Debugger.cpp (original)
> +++ lldb/trunk/source/Core/Debugger.cpp Wed Jun 30 11:22:25 2010
> @@ -24,6 +24,8 @@
>
> static uint32_t g_shared_debugger_refcount = 0;
>
> +static lldb::user_id_t g_unique_id = 1;
> +
> void
> Debugger::Initialize ()
> {
> @@ -115,6 +117,7 @@
>
>
> Debugger::Debugger () :
> + UserID (g_unique_id++),
> m_input_comm("debugger.input"),
> m_input_file (),
> m_output_file (),
> @@ -491,3 +494,21 @@
> }
> }
>
> +DebuggerSP
> +Debugger::FindDebuggerWithID (lldb::user_id_t id)
> +{
> + lldb::DebuggerSP debugger_sp;
> +
> + Mutex::Locker locker (GetDebuggerListMutex ());
> + DebuggerList &debugger_list = GetDebuggerList();
> + DebuggerList::iterator pos, end = debugger_list.end();
> + for (pos = debugger_list.begin(); pos != end; ++pos)
> + {
> + if ((*pos).get()->GetID() == id)
> + {
> + debugger_sp = *pos;
> + break;
> + }
> + }
> + return debugger_sp;
> +}
>
> Modified: lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp?rev=107287&r1=107286&r2=107287&view=diff
> ==============================================================================
> --- lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp (original)
> +++ lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp Wed Jun 30 11:22:25 2010
> @@ -238,6 +238,10 @@
> PyRun_SimpleString ("new_mode[3] = new_mode[3] | ECHO | ICANON");
> PyRun_SimpleString ("new_mode[6][VEOF] = 255");
> PyRun_SimpleString ("tcsetattr (new_stdin, TCSANOW, new_mode)");
> +
> + run_string.Clear();
> + run_string.Printf ("debugger_unique_id = %d", interpreter.GetDebugger().GetID());
> + PyRun_SimpleString (run_string.GetData());
> }
>
>
>
>
> _______________________________________________
> lldb-commits mailing list
> lldb-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
More information about the lldb-commits
mailing list