[lldb-dev] [PATCH] Add API control of the signal disposition.

Todd Fiala tfiala at google.com
Tue Jun 17 10:32:52 PDT 2014


Hi Russell,

Can you put that on Phabricator (http://reviews.llvm.org/) and assign to
me?  Thanks!

-Todd


On Tue, Jun 17, 2014 at 9:35 AM, Russell Harmon <eatnumber1 at google.com>
wrote:

> Ping. Can someone take a look at this when they get a chance?
>
>
> On Thu Jun 05 2014 at 6:17:00 PM, Russell Harmon <eatnumber1 at google.com>
> wrote:
>
>> This commit allows you to control the signals that lldb will suppress,
>> stop or
>> forward using the Python and C++ APIs.
>> ---
>>  include/lldb/API/SBDefines.h              |   1 +
>>  include/lldb/API/SBProcess.h              |   3 +
>>  include/lldb/API/SBUnixSignals.h          |  84 +++++++++++++
>>  include/lldb/lldb-defines.h               |   4 +
>>  include/lldb/lldb-forward.h               |   1 +
>>  scripts/Python/build-swig-Python.sh       |   6 +-
>>  scripts/Python/interface/SBProcess.i      |   3 +
>>  scripts/Python/interface/SBUnixSignals.i  |  74 ++++++++++++
>>  scripts/lldb.swig                         |   5 +
>>  source/API/CMakeLists.txt                 |   1 +
>>  source/API/SBProcess.cpp                  |  14 +++
>>  source/API/SBUnixSignals.cpp              | 192
>> ++++++++++++++++++++++++++++++
>>  test/python_api/signals/Makefile          |   5 +
>>  test/python_api/signals/TestSignalsAPI.py |  49 ++++++++
>>  test/python_api/signals/main.cpp          |  20 ++++
>>  15 files changed, 460 insertions(+), 2 deletions(-)
>>  create mode 100644 include/lldb/API/SBUnixSignals.h
>>  create mode 100644 scripts/Python/interface/SBUnixSignals.i
>>  create mode 100644 source/API/SBUnixSignals.cpp
>>  create mode 100644 test/python_api/signals/Makefile
>>  create mode 100644 test/python_api/signals/TestSignalsAPI.py
>>  create mode 100644 test/python_api/signals/main.cpp
>>
>> diff --git a/include/lldb/API/SBDefines.h b/include/lldb/API/SBDefines.h
>> index 15d8d1f..30ea0df 100644
>> --- a/include/lldb/API/SBDefines.h
>> +++ b/include/lldb/API/SBDefines.h
>> @@ -85,6 +85,7 @@ class LLDB_API SBTypeList;
>>  class LLDB_API SBValue;
>>  class LLDB_API SBValueList;
>>  class LLDB_API SBWatchpoint;
>> +class LLDB_API SBUnixSignals;
>>
>>  }
>>
>> diff --git a/include/lldb/API/SBProcess.h b/include/lldb/API/SBProcess.h
>> index 448e959..4b59462 100644
>> --- a/include/lldb/API/SBProcess.h
>> +++ b/include/lldb/API/SBProcess.h
>> @@ -221,6 +221,9 @@ public:
>>      lldb::SBError
>>      Signal (int signal);
>>
>> +    lldb::SBUnixSignals
>> +    GetUnixSignals();
>> +
>>      void
>>      SendAsyncInterrupt();
>>
>> diff --git a/include/lldb/API/SBUnixSignals.h b/include/lldb/API/
>> SBUnixSignals.h
>> new file mode 100644
>> index 0000000..d95453a
>> --- /dev/null
>> +++ b/include/lldb/API/SBUnixSignals.h
>> @@ -0,0 +1,84 @@
>> +//===-- SBUnixSignals.h -----------------------------------------------*-
>> C++ -*-===//
>> +//
>> +//                     The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//===------------------------------------------------------
>> ----------------===//
>> +
>> +#ifndef LLDB_SBUnixSignals_h_
>> +#define LLDB_SBUnixSignals_h_
>> +
>> +#include "lldb/API/SBDefines.h"
>> +
>> +namespace lldb {
>> +
>> +class SBUnixSignals {
>> +public:
>> +    SBUnixSignals ();
>> +
>> +    SBUnixSignals (const lldb::SBUnixSignals &rhs);
>> +
>> +    ~SBUnixSignals();
>> +
>> +    const SBUnixSignals &
>> +    operator =(const lldb::SBUnixSignals &rhs);
>> +
>> +    void
>> +    Clear ();
>> +
>> +    bool
>> +    IsValid () const;
>> +
>> +    const char *
>> +    GetSignalAsCString (int32_t signo) const;
>> +
>> +    int32_t
>> +    GetSignalNumberFromName (const char *name) const;
>> +
>> +    bool
>> +    GetShouldSuppress (int32_t signo) const;
>> +
>> +    bool
>> +    SetShouldSuppress (int32_t signo,
>> +                       bool value);
>> +
>> +    bool
>> +    GetShouldStop (int32_t signo) const;
>> +
>> +    bool
>> +    SetShouldStop (int32_t signo,
>> +                   bool value);
>> +
>> +    bool
>> +    GetShouldNotify (int32_t signo) const;
>> +
>> +    bool
>> +    SetShouldNotify (int32_t signo, bool value);
>> +
>> +    int32_t
>> +    GetNumSignals () const;
>> +
>> +    int32_t
>> +    GetSignalAtIndex (int32_t index) const;
>> +
>> +protected:
>> +    friend class SBProcess;
>> +
>> +    SBUnixSignals (lldb_private::UnixSignals *unix_signals_ptr);
>> +
>> +    lldb_private::UnixSignals *
>> +    GetPtr() const;
>> +
>> +    void
>> +    SetPtr (lldb_private::UnixSignals *unix_signals_ptr);
>> +
>> +private:
>> +    lldb_private::UnixSignals *m_opaque_ptr;
>> +};
>> +
>> +
>> +} // namespace lldb
>> +
>> +#endif // LLDB_SBUnixSignals_h_
>> diff --git a/include/lldb/lldb-defines.h b/include/lldb/lldb-defines.h
>> index 1cfbe4e..f8a0257 100644
>> --- a/include/lldb/lldb-defines.h
>> +++ b/include/lldb/lldb-defines.h
>> @@ -24,6 +24,10 @@
>>      #define LLDB_API
>>  #endif
>>
>> +#if !defined(INT32_MAX)
>> +    #define INT32_MAX 2147483647
>> +#endif
>> +
>>  #if !defined(UINT32_MAX)
>>      #define UINT32_MAX 4294967295U
>>  #endif
>> diff --git a/include/lldb/lldb-forward.h b/include/lldb/lldb-forward.h
>> index 9cd6adb..e4db5a1 100644
>> --- a/include/lldb/lldb-forward.h
>> +++ b/include/lldb/lldb-forward.h
>> @@ -249,6 +249,7 @@ class   TypeEnumMemberListImpl;
>>  class   TypeNameSpecifierImpl;
>>  class   TypePair;
>>  class   UUID;
>> +class   UnixSignals;
>>  class   Unwind;
>>  class   UnwindAssembly;
>>  class   UnwindPlan;
>> diff --git a/scripts/Python/build-swig-Python.sh
>> b/scripts/Python/build-swig-Python.sh
>> index 5f9b574..3e30a6a 100755
>> --- a/scripts/Python/build-swig-Python.sh
>> +++ b/scripts/Python/build-swig-Python.sh
>> @@ -122,7 +122,8 @@ HEADER_FILES="${SRC_ROOT}/include/lldb/lldb.h"\
>>  " ${SRC_ROOT}/include/lldb/API/SBTypeSynthetic.h"\
>>  " ${SRC_ROOT}/include/lldb/API/SBValue.h"\
>>  " ${SRC_ROOT}/include/lldb/API/SBValueList.h"\
>> -" ${SRC_ROOT}/include/lldb/API/SBWatchpoint.h"
>> +" ${SRC_ROOT}/include/lldb/API/SBWatchpoint.h"\
>> +" ${SRC_ROOT}/include/lldb/API/SBUnixSignals.h"
>>
>>  INTERFACE_FILES="${SRC_ROOT}/scripts/Python/interface/SBAddress.i"\
>>  " ${SRC_ROOT}/scripts/Python/interface/SBBlock.i"\
>> @@ -169,7 +170,8 @@ INTERFACE_FILES="${SRC_ROOT}/
>> scripts/Python/interface/SBAddress.i"\
>>  " ${SRC_ROOT}/scripts/Python/interface/SBTypeSynthetic.i"\
>>  " ${SRC_ROOT}/scripts/Python/interface/SBValue.i"\
>>  " ${SRC_ROOT}/scripts/Python/interface/SBValueList.i"\
>> -" ${SRC_ROOT}/scripts/Python/interface/SBWatchpoint.i"
>> +" ${SRC_ROOT}/scripts/Python/interface/SBWatchpoint.i"\
>> +" ${SRC_ROOT}/scripts/Python/interface/SBUnixSignals.i"
>>
>>  if [ $Debug -eq 1 ]
>>  then
>> diff --git a/scripts/Python/interface/SBProcess.i
>> b/scripts/Python/interface/SBProcess.i
>> index d023b24..5cd99c0 100644
>> --- a/scripts/Python/interface/SBProcess.i
>> +++ b/scripts/Python/interface/SBProcess.i
>> @@ -240,6 +240,9 @@ public:
>>      lldb::SBError
>>      Signal (int signal);
>>
>> +    lldb::SBUnixSignals
>> +    GetUnixSignals();
>> +
>>      %feature("docstring", "
>>      Returns a stop id that will increase every time the process
>> executes.  If
>>      include_expression_stops is true, then stops caused by expression
>> evaluation
>> diff --git a/scripts/Python/interface/SBUnixSignals.i
>> b/scripts/Python/interface/SBUnixSignals.i
>> new file mode 100644
>> index 0000000..2bd537a
>> --- /dev/null
>> +++ b/scripts/Python/interface/SBUnixSignals.i
>> @@ -0,0 +1,74 @@
>> +//===-- SWIG Interface for SBProcess ----------------------------*- C++
>> -*-===//
>> +//
>> +//                     The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//===------------------------------------------------------
>> ----------------===//
>> +
>> +namespace lldb {
>> +
>> +%feature("docstring",
>> +"Allows you to manipulate LLDB's signal disposition"
>> +) SBUnixSignals;
>> +class SBUnixSignals
>> +{
>> +public:
>> +    SBUnixSignals ();
>> +
>> +    SBUnixSignals (const lldb::SBUnixSignals &rhs);
>> +
>> +    ~SBUnixSignals();
>> +
>> +    void
>> +    Clear ();
>> +
>> +    bool
>> +    IsValid () const;
>> +
>> +    const char *
>> +    GetSignalAsCString (int32_t signo) const;
>> +
>> +    int32_t
>> +    GetSignalNumberFromName (const char *name) const;
>> +
>> +    bool
>> +    GetShouldSuppress (int32_t signo) const;
>> +
>> +    bool
>> +    SetShouldSuppress (int32_t signo,
>> +                       bool value);
>> +
>> +    bool
>> +    GetShouldStop (int32_t signo) const;
>> +
>> +    bool
>> +    SetShouldStop (int32_t signo,
>> +                   bool value);
>> +
>> +    bool
>> +    GetShouldNotify (int32_t signo) const;
>> +
>> +    bool
>> +    SetShouldNotify (int32_t signo, bool value);
>> +
>> +    int32_t
>> +    GetNumSignals () const;
>> +
>> +    int32_t
>> +    GetSignalAtIndex (int32_t index) const;
>> +
>> +    %pythoncode %{
>> +        def get_unix_signals_list(self):
>> +            signals = []
>> +            for idx in range(0, self.GetNumSignals()):
>> +                signals.append(self.GetSignalAtIndex(sig))
>> +            return signals
>> +
>> +        __swig_getmethods__["signals"] = get_unix_signals_list
>> +        if _newclass: threads = property(get_unix_signals_list, None,
>> doc='''A read only property that returns a list() of valid signal numbers
>> for this platform.''')
>> +    %}
>> +};
>> +
>> +}  // namespace lldb
>> diff --git a/scripts/lldb.swig b/scripts/lldb.swig
>> index 1a230d1..94392a1 100644
>> --- a/scripts/lldb.swig
>> +++ b/scripts/lldb.swig
>> @@ -102,6 +102,7 @@ import os
>>  #include "lldb/API/SBValue.h"
>>  #include "lldb/API/SBValueList.h"
>>  #include "lldb/API/SBWatchpoint.h"
>> +#include "lldb/API/SBUnixSignals.h"
>>
>>  #include "../scripts/Python/python-swigsafecast.swig"
>>
>> @@ -109,6 +110,9 @@ import os
>>
>>  /* Various liblldb typedefs that SWIG needs to know about.  */
>>  #define __extension__ /* Undefine GCC keyword to make Swig happy when
>> processing glibc's stdint.h. */
>> +/* The ISO C99 standard specifies that in C++ implementations limit
>> macros such
>> +   as INT32_MAX should only be defined if __STDC_LIMIT_MACROS is. */
>> +#define __STDC_LIMIT_MACROS
>>  %include "stdint.i"
>>  %include "lldb/lldb-defines.h"
>>  %include "lldb/lldb-enumerations.h"
>> @@ -169,6 +173,7 @@ import os
>>  %include "./Python/interface/SBValue.i"
>>  %include "./Python/interface/SBValueList.i"
>>  %include "./Python/interface/SBWatchpoint.i"
>> +%include "./Python/interface/SBUnixSignals.i"
>>
>>  %include "./Python/python-extensions.swig"
>>
>> diff --git a/source/API/CMakeLists.txt b/source/API/CMakeLists.txt
>> index 63adb68..b903b4e 100644
>> --- a/source/API/CMakeLists.txt
>> +++ b/source/API/CMakeLists.txt
>> @@ -51,4 +51,5 @@ add_lldb_library(lldbAPI
>>    SBValue.cpp
>>    SBValueList.cpp
>>    SBWatchpoint.cpp
>> +  SBUnixSignals.cpp
>>    )
>> diff --git a/source/API/SBProcess.cpp b/source/API/SBProcess.cpp
>> index bb5b989..2f32f28 100644
>> --- a/source/API/SBProcess.cpp
>> +++ b/source/API/SBProcess.cpp
>> @@ -40,6 +40,7 @@
>>  #include "lldb/API/SBThread.h"
>>  #include "lldb/API/SBStream.h"
>>  #include "lldb/API/SBStringList.h"
>> +#include "lldb/API/SBUnixSignals.h"
>>
>>  using namespace lldb;
>>  using namespace lldb_private;
>> @@ -893,6 +894,19 @@ SBProcess::Signal (int signo)
>>      return sb_error;
>>  }
>>
>> +SBUnixSignals
>> +SBProcess::GetUnixSignals()
>> +{
>> +    SBUnixSignals sb_unix_signals;
>> +    ProcessSP process_sp(GetSP());
>> +    if (process_sp)
>> +    {
>> +        sb_unix_signals.SetPtr(&process_sp->GetUnixSignals());
>> +    }
>> +
>> +    return sb_unix_signals;
>> +}
>> +
>>  void
>>  SBProcess::SendAsyncInterrupt ()
>>  {
>> diff --git a/source/API/SBUnixSignals.cpp b/source/API/SBUnixSignals.cpp
>> new file mode 100644
>> index 0000000..21c508d
>> --- /dev/null
>> +++ b/source/API/SBUnixSignals.cpp
>> @@ -0,0 +1,192 @@
>> +//===-- SBUnixSignals.cpp -------------------------------------------*-
>> C++ -*-===//
>> +//
>> +//                     The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//===------------------------------------------------------
>> ----------------===//
>> +
>> +#include "lldb/lldb-defines.h"
>> +#include "lldb/Target/UnixSignals.h"
>> +#include "lldb/Core/Log.h"
>> +
>> +#include "lldb/API/SBUnixSignals.h"
>> +
>> +using namespace lldb;
>> +using namespace lldb_private;
>> +
>> +SBUnixSignals::SBUnixSignals () :
>> +    m_opaque_ptr(NULL)
>> +{
>> +}
>> +
>> +SBUnixSignals::SBUnixSignals (const SBUnixSignals &rhs) :
>> +    m_opaque_ptr(rhs.m_opaque_ptr)
>> +{
>> +}
>> +
>> +SBUnixSignals::SBUnixSignals (UnixSignals *unix_signals_ptr) :
>> +    m_opaque_ptr(unix_signals_ptr)
>> +{
>> +}
>> +
>> +const SBUnixSignals&
>> +SBUnixSignals::operator = (const SBUnixSignals& rhs)
>> +{
>> +    if (this != &rhs)
>> +        m_opaque_ptr = rhs.m_opaque_ptr;
>> +    return *this;
>> +}
>> +
>> +SBUnixSignals::~SBUnixSignals()
>> +{
>> +}
>> +
>> +UnixSignals *
>> +SBUnixSignals::GetPtr() const
>> +{
>> +    return m_opaque_ptr;
>> +}
>> +
>> +void
>> +SBUnixSignals::SetPtr (UnixSignals *unix_signals_ptr)
>> +{
>> +    m_opaque_ptr = unix_signals_ptr;
>> +}
>> +
>> +void
>> +SBUnixSignals::Clear ()
>> +{
>> +    m_opaque_ptr = NULL;
>> +}
>> +
>> +bool
>> +SBUnixSignals::IsValid() const
>> +{
>> +    return m_opaque_ptr != NULL;
>> +}
>> +
>> +const char *
>> +SBUnixSignals::GetSignalAsCString (int32_t signo) const
>> +{
>> +    if (m_opaque_ptr) return m_opaque_ptr->GetSignalAsCString(signo);
>> +    return NULL;
>> +}
>> +
>> +int32_t
>> +SBUnixSignals::GetSignalNumberFromName (const char *name) const
>> +{
>> +    if (m_opaque_ptr) return m_opaque_ptr->
>> GetSignalNumberFromName(name);
>> +    return -1;
>> +}
>> +
>> +bool
>> +SBUnixSignals::GetShouldSuppress (int32_t signo) const
>> +{
>> +    if (m_opaque_ptr) return m_opaque_ptr->GetShouldSuppress(signo);
>> +    return false;
>> +}
>> +
>> +bool
>> +SBUnixSignals::SetShouldSuppress (int32_t signo, bool value)
>> +{
>> +    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
>> +
>> +    if (log)
>> +    {
>> +        log->Printf ("SBUnixSignals(%p)::SetShouldSuppress (signo=%d,
>> value=%d)",
>> +                     m_opaque_ptr,
>> +                     signo,
>> +                     value);
>> +    }
>> +
>> +    if (m_opaque_ptr) return m_opaque_ptr->SetShouldSuppress(signo,
>> value);
>> +    return false;
>> +}
>> +
>> +bool
>> +SBUnixSignals::GetShouldStop (int32_t signo) const
>> +{
>> +    if (m_opaque_ptr) return m_opaque_ptr->GetShouldStop(signo);
>> +    return false;
>> +}
>> +
>> +bool
>> +SBUnixSignals::SetShouldStop (int32_t signo, bool value)
>> +{
>> +    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
>> +
>> +    if (log)
>> +    {
>> +        log->Printf ("SBUnixSignals(%p)::SetShouldStop (signo=%d,
>> value=%d)",
>> +                     m_opaque_ptr,
>> +                     signo,
>> +                     value);
>> +    }
>> +
>> +    if (m_opaque_ptr) return m_opaque_ptr->SetShouldStop(signo, value);
>> +    return false;
>> +}
>> +
>> +bool
>> +SBUnixSignals::GetShouldNotify (int32_t signo) const
>> +{
>> +    if (m_opaque_ptr) return m_opaque_ptr->GetShouldNotify(signo);
>> +    return false;
>> +}
>> +
>> +bool
>> +SBUnixSignals::SetShouldNotify (int32_t signo, bool value)
>> +{
>> +    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
>> +
>> +    if (log)
>> +    {
>> +        log->Printf ("SBUnixSignals(%p)::SetShouldNotify (signo=%d,
>> value=%d)",
>> +                     m_opaque_ptr,
>> +                     signo,
>> +                     value);
>> +    }
>> +
>> +    if (m_opaque_ptr) return m_opaque_ptr->SetShouldNotify(signo,
>> value);
>> +    return false;
>> +}
>> +
>> +int32_t
>> +SBUnixSignals::GetNumSignals () const
>> +{
>> +    if (m_opaque_ptr)
>> +    {
>> +        int32_t num_signals = 0;
>> +        for (
>> +            int32_t signo = m_opaque_ptr->GetFirstSignalNumber();
>> +            signo != LLDB_INVALID_SIGNAL_NUMBER;
>> +            signo = m_opaque_ptr->GetNextSignalNumber(signo)
>> +        )
>> +        {
>> +            num_signals++;
>> +        }
>> +        return num_signals;
>> +    }
>> +    return LLDB_INVALID_SIGNAL_NUMBER;
>> +}
>> +
>> +int32_t
>> +SBUnixSignals::GetSignalAtIndex (int32_t index) const
>> +{
>> +    if (m_opaque_ptr)
>> +    {
>> +        int32_t idx = 0;
>> +        for (
>> +            int32_t signo = m_opaque_ptr->GetFirstSignalNumber();
>> +            signo != LLDB_INVALID_SIGNAL_NUMBER;
>> +            signo = m_opaque_ptr->GetNextSignalNumber(signo)
>> +        )
>> +        {
>> +            if (index == idx) return signo;
>> +            idx++;
>> +        }
>> +    }
>> +    return LLDB_INVALID_SIGNAL_NUMBER;
>> +}
>> diff --git a/test/python_api/signals/Makefile b/test/python_api/signals/
>> Makefile
>> new file mode 100644
>> index 0000000..8a7102e
>> --- /dev/null
>> +++ b/test/python_api/signals/Makefile
>> @@ -0,0 +1,5 @@
>> +LEVEL = ../../make
>> +
>> +CXX_SOURCES := main.cpp
>> +
>> +include $(LEVEL)/Makefile.rules
>> diff --git a/test/python_api/signals/TestSignalsAPI.py
>> b/test/python_api/signals/TestSignalsAPI.py
>> new file mode 100644
>> index 0000000..9702284
>> --- /dev/null
>> +++ b/test/python_api/signals/TestSignalsAPI.py
>> @@ -0,0 +1,49 @@
>> +"""
>> +Test SBProcess APIs, including ReadMemory(), WriteMemory(), and others.
>> +"""
>> +
>> +import os, time
>> +import unittest2
>> +import lldb
>> +from lldbutil import get_stopped_thread, state_type_to_str
>> +from lldbtest import *
>> +
>> +class SignalsAPITestCase(TestBase):
>> +    mydir = os.path.join("python_api", "signals")
>> +
>> +    @python_api_test
>> +    def test_ignore_signal(self):
>> +        """Test Python SBUnixSignals.Suppress/Stop/Notify() API."""
>> +        self.buildDefault()
>> +        exe = os.path.join(os.getcwd(), "a.out")
>> +        self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
>> +
>> +        target = self.dbg.CreateTarget(exe)
>> +        self.assertTrue(target, VALID_TARGET)
>> +
>> +        line = line_number("main.cpp", "// Set break point at this line
>> and setup signal ignores.")
>> +        breakpoint = target.BreakpointCreateByLocation("main.cpp", line)
>> +        self.assertTrue(breakpoint, VALID_BREAKPOINT)
>> +
>> +        # Launch the process, and do not stop at the entry point.
>> +        process = target.LaunchSimple (None, None,
>> self.get_process_working_directory())
>> +
>> +        thread = get_stopped_thread(process, lldb.eStopReasonBreakpoint)
>> +        self.assertTrue(thread.IsValid(), "There should be a thread
>> stopped due to breakpoint")
>> +
>> +        unix_signals = process.GetUnixSignals()
>> +        sigint = unix_signals.GetSignalNumberFromName("SIGINT")
>> +        unix_signals.SetShouldSuppress(sigint, True)
>> +        unix_signals.SetShouldStop(sigint, False)
>> +        unix_signals.SetShouldNotify(sigint, False)
>> +
>> +        process.Continue()
>> +        self.assertTrue(process.state == lldb.eStateExited, "The process
>> should have exited")
>> +        self.assertTrue(process.GetExitStatus() == 0, "The process
>> should have returned 0")
>> +
>> +
>> +if __name__ == '__main__':
>> +    import atexit
>> +    lldb.SBDebugger.Initialize()
>> +    atexit.register(lambda: lldb.SBDebugger.Terminate())
>> +    unittest2.main()
>> diff --git a/test/python_api/signals/main.cpp b/test/python_api/signals/
>> main.cpp
>> new file mode 100644
>> index 0000000..ddd2ffe
>> --- /dev/null
>> +++ b/test/python_api/signals/main.cpp
>> @@ -0,0 +1,20 @@
>> +//===-- main.c --------------------------------------------------*- C++
>> -*-===//
>> +//
>> +//                     The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//===------------------------------------------------------
>> ----------------===//
>> +#include <stdio.h>
>> +#include <sys/types.h>
>> +#include <unistd.h>
>> +#include <signal.h>
>> +
>> +// This simple program is to test the lldb Python API related to process.
>> +
>> +int main (int argc, char const *argv[])
>> +{
>> +    kill(getpid(), SIGINT); // Set break point at this line and setup
>> signal ignores.
>> +    return 0;
>> +}
>> --
>> 2.0.0.526.g5318336
>>
>>
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
>
>


-- 
Todd Fiala | Software Engineer | tfiala at google.com | 650-943-3180
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20140617/d0532574/attachment.html>


More information about the lldb-dev mailing list