[Lldb-commits] [PATCH] D61602: Handle function parameters of RunCommandInterpreter (script bridge)

2019-05-06 Thread Lukas Böger via Phabricator via lldb-commits
lubgr created this revision.
lubgr added a reviewer: jingham.
lubgr added a project: LLDB.

This issue goes back to this SO answer 
 by  Jim Ingham, suggesting to 
fix the python bindings for RunCommandInterpreter. The reference parameters 
aren't properly handled by SWIG, but we can use the default typemaps library to 
generate the necessary glue. The new test captures this behavior (it fails 
without the adjustment in SBDebugger.i).

This is my first patch, so let me know if any additional tests/background/info 
would be helpful.


Repository:
  rLLDB LLDB

https://reviews.llvm.org/D61602

Files:
  
packages/Python/lldbsuite/test/python_api/interpreter/TestRunCommandInterpreterAPI.py
  scripts/interface/SBDebugger.i


Index: scripts/interface/SBDebugger.i
===
--- scripts/interface/SBDebugger.i
+++ scripts/interface/SBDebugger.i
@@ -423,6 +423,9 @@
 lldb::SBTypeSynthetic
 GetSyntheticForType (lldb::SBTypeNameSpecifier);
 
+%apply int& INOUT { int& num_errors };
+%apply bool& INOUT { bool& quit_requested };
+%apply bool& INOUT { bool& stopped_for_crash };
 void
 RunCommandInterpreter (bool auto_handle_events,
bool spawn_thread,
Index: 
packages/Python/lldbsuite/test/python_api/interpreter/TestRunCommandInterpreterAPI.py
===
--- /dev/null
+++ 
packages/Python/lldbsuite/test/python_api/interpreter/TestRunCommandInterpreterAPI.py
@@ -0,0 +1,38 @@
+"""Test the RunCommandInterpreter API."""
+
+import os
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+
+class CommandRunInterpreterAPICase(TestBase):
+
+mydir = TestBase.compute_mydir(__file__)
+
+def setUp(self):
+TestBase.setUp(self)
+
+self.stdin_path = self.getBuildArtifact("stdin.txt")
+
+with open(self.stdin_path, 'w') as input_handle:
+input_handle.write("nonexistingcommand\nquit")
+
+with open(self.stdin_path, 'r') as input_handle:
+self.dbg.SetInputFileHandle(input_handle, False)
+
+# No need to track the output
+devnull = open(os.devnull, 'w')
+self.dbg.SetOutputFileHandle(devnull, False)
+self.dbg.SetErrorFileHandle(devnull, False)
+
+@add_test_categories(['pyapi'])
+def test_run_session_with_error_and_quit(self):
+"""Run non-existing and quit command returns appropriate values"""
+
+n_errors, quit_requested, has_crashed = self.dbg.RunCommandInterpreter(
+True, False, lldb.SBCommandInterpreterRunOptions(), 0, False,
+False)
+
+self.assertGreater(n_errors, 0)
+self.assertTrue(quit_requested)
+self.assertFalse(has_crashed)


Index: scripts/interface/SBDebugger.i
===
--- scripts/interface/SBDebugger.i
+++ scripts/interface/SBDebugger.i
@@ -423,6 +423,9 @@
 lldb::SBTypeSynthetic
 GetSyntheticForType (lldb::SBTypeNameSpecifier);
 
+%apply int& INOUT { int& num_errors };
+%apply bool& INOUT { bool& quit_requested };
+%apply bool& INOUT { bool& stopped_for_crash };
 void
 RunCommandInterpreter (bool auto_handle_events,
bool spawn_thread,
Index: packages/Python/lldbsuite/test/python_api/interpreter/TestRunCommandInterpreterAPI.py
===
--- /dev/null
+++ packages/Python/lldbsuite/test/python_api/interpreter/TestRunCommandInterpreterAPI.py
@@ -0,0 +1,38 @@
+"""Test the RunCommandInterpreter API."""
+
+import os
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+
+class CommandRunInterpreterAPICase(TestBase):
+
+mydir = TestBase.compute_mydir(__file__)
+
+def setUp(self):
+TestBase.setUp(self)
+
+self.stdin_path = self.getBuildArtifact("stdin.txt")
+
+with open(self.stdin_path, 'w') as input_handle:
+input_handle.write("nonexistingcommand\nquit")
+
+with open(self.stdin_path, 'r') as input_handle:
+self.dbg.SetInputFileHandle(input_handle, False)
+
+# No need to track the output
+devnull = open(os.devnull, 'w')
+self.dbg.SetOutputFileHandle(devnull, False)
+self.dbg.SetErrorFileHandle(devnull, False)
+
+@add_test_categories(['pyapi'])
+def test_run_session_with_error_and_quit(self):
+"""Run non-existing and quit command returns appropriate values"""
+
+n_errors, quit_requested, has_crashed = self.dbg.RunCommandInterpreter(
+True, False, lldb.SBCommandInterpreterRunOptions(), 0, False,
+False)
+
+self.assertGreater(n_errors, 0)
+self.assertTrue(quit_requested)
+self.assertFalse(has_crashed)
___

[Lldb-commits] [PATCH] D61602: Handle function parameters of RunCommandInterpreter (script bridge)

2019-05-11 Thread Lukas Böger via Phabricator via lldb-commits
lubgr updated this revision to Diff 199152.
lubgr added a comment.

I added the docstring for RunCommandInterpreter, including a simple example 
invocation.


Repository:
  rLLDB LLDB

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D61602/new/

https://reviews.llvm.org/D61602

Files:
  
packages/Python/lldbsuite/test/python_api/interpreter/TestRunCommandInterpreterAPI.py
  scripts/interface/SBDebugger.i


Index: scripts/interface/SBDebugger.i
===
--- scripts/interface/SBDebugger.i
+++ scripts/interface/SBDebugger.i
@@ -423,6 +423,32 @@
 lldb::SBTypeSynthetic
 GetSyntheticForType (lldb::SBTypeNameSpecifier);
 
+%feature("docstring",
+"Launch a command interpreter session. Commands are read from standard input or
+from the input handle specified for the debugger object. Output/errors are
+similarly redirected to standard output/error or the configured handles.
+
+@param[in] auto_handle_events If true, automatically handle resulting events.
+@param[in] spawn_thread If true, start a new thread for IO handling.
+@param[in] options Parameter collection of type SBCommandInterpreterRunOptions.
+@param[in] num_errors Initial error counter.
+@param[in] quit_requested Initial quit request flag.
+@param[in] stopped_for_crash Initial crash flag.
+
+@return
+A tuple with the number of errors encountered by the interpreter, a boolean
+indicating whether quitting the interpreter was requested and another boolean
+set to True in case of a crash.
+
+Example:
+
+# Start an interactive lldb session from a script (with a valid debugger object
+# created beforehand):
+n_errors, quit_requested, has_crashed = debugger.RunCommandInterpreter(True,
+False, lldb.SBCommandInterpreterRunOptions(), 0, False, False)") 
RunCommandInterpreter;
+%apply int& INOUT { int& num_errors };
+%apply bool& INOUT { bool& quit_requested };
+%apply bool& INOUT { bool& stopped_for_crash };
 void
 RunCommandInterpreter (bool auto_handle_events,
bool spawn_thread,
Index: 
packages/Python/lldbsuite/test/python_api/interpreter/TestRunCommandInterpreterAPI.py
===
--- /dev/null
+++ 
packages/Python/lldbsuite/test/python_api/interpreter/TestRunCommandInterpreterAPI.py
@@ -0,0 +1,38 @@
+"""Test the RunCommandInterpreter API."""
+
+import os
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+
+class CommandRunInterpreterAPICase(TestBase):
+
+mydir = TestBase.compute_mydir(__file__)
+
+def setUp(self):
+TestBase.setUp(self)
+
+self.stdin_path = self.getBuildArtifact("stdin.txt")
+
+with open(self.stdin_path, 'w') as input_handle:
+input_handle.write("nonexistingcommand\nquit")
+
+with open(self.stdin_path, 'r') as input_handle:
+self.dbg.SetInputFileHandle(input_handle, False)
+
+# No need to track the output
+devnull = open(os.devnull, 'w')
+self.dbg.SetOutputFileHandle(devnull, False)
+self.dbg.SetErrorFileHandle(devnull, False)
+
+@add_test_categories(['pyapi'])
+def test_run_session_with_error_and_quit(self):
+"""Run non-existing and quit command returns appropriate values"""
+
+n_errors, quit_requested, has_crashed = self.dbg.RunCommandInterpreter(
+True, False, lldb.SBCommandInterpreterRunOptions(), 0, False,
+False)
+
+self.assertGreater(n_errors, 0)
+self.assertTrue(quit_requested)
+self.assertFalse(has_crashed)


Index: scripts/interface/SBDebugger.i
===
--- scripts/interface/SBDebugger.i
+++ scripts/interface/SBDebugger.i
@@ -423,6 +423,32 @@
 lldb::SBTypeSynthetic
 GetSyntheticForType (lldb::SBTypeNameSpecifier);
 
+%feature("docstring",
+"Launch a command interpreter session. Commands are read from standard input or
+from the input handle specified for the debugger object. Output/errors are
+similarly redirected to standard output/error or the configured handles.
+
+@param[in] auto_handle_events If true, automatically handle resulting events.
+@param[in] spawn_thread If true, start a new thread for IO handling.
+@param[in] options Parameter collection of type SBCommandInterpreterRunOptions.
+@param[in] num_errors Initial error counter.
+@param[in] quit_requested Initial quit request flag.
+@param[in] stopped_for_crash Initial crash flag.
+
+@return
+A tuple with the number of errors encountered by the interpreter, a boolean
+indicating whether quitting the interpreter was requested and another boolean
+set to True in case of a crash.
+
+Example:
+
+# Start an interactive lldb session from a script (with a valid debugger object
+# created beforehand):
+n_errors, quit_requested, has_crashed = debugger.RunCommandInterpreter(True,
+False, lldb.SBCommandInterpreterRunO

[Lldb-commits] [PATCH] D61602: Handle function parameters of RunCommandInterpreter (script bridge)

2019-05-13 Thread Lukas Böger via Phabricator via lldb-commits
lubgr added a comment.

No, I don't have the permissions. Thanks in advance for comitting this.


Repository:
  rLLDB LLDB

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D61602/new/

https://reviews.llvm.org/D61602



___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D63813: Adjust variable formatting table

2019-06-26 Thread Lukas Böger via Phabricator via lldb-commits
lubgr created this revision.
lubgr added a reviewer: jingham.
lubgr added a project: LLDB.
Herald added subscribers: lldb-commits, abidh.

While the in-place hints on valid formats are up to date (e.g. when choosing an 
invalid format `expr -f nonExisting -- 42`), the corresponding online docs 
table is not. The formats "address", "hex float", "instruction" and "void" are 
missing, and "decimal" refers to an outdated abbreviation 'i' instead of 'd'.


Repository:
  rLLDB LLDB

https://reviews.llvm.org/D63813

Files:
  docs/use/variable.rst


Index: docs/use/variable.rst
===
--- docs/use/variable.rst
+++ docs/use/variable.rst
@@ -197,7 +197,7 @@
 
+---+--+--+
 | ``c-string``  | s| show this 
as a 0-terminated C string |
 
+---+--+--+
-| ``decimal``   | i| show this 
as a signed integer number (this does not perform a cast, it   |
+| ``decimal``   | d| show this 
as a signed integer number (this does not perform a cast, it   |
 |   |  | simply 
shows the bytes as  an integer with sign) |
 
+---+--+--+
 | ``enumeration``   | E| show this 
as an enumeration, printing the|
@@ -239,6 +239,14 @@
 
+---+--+--+
 | ``character array``   | a| show this 
as a character array   |
 
+---+--+--+
+| ``address``   | A| show this 
as an address target (symbol/file/line + offset)   |
++---+--+--+
+| ``hex float`` |  | show this 
as hexadecimal floating point  |
++---+--+--+
+| ``instruction``   | i| show this 
as an disassembled opcode  |
++---+--+--+
+| ``void``  | v| don't 
show anything  |
++---+--+--+
 
 Type Summary
 


Index: docs/use/variable.rst
===
--- docs/use/variable.rst
+++ docs/use/variable.rst
@@ -197,7 +197,7 @@
 +---+--+--+
 | ``c-string``  | s| show this as a 0-terminated C string |
 +---+--+--+
-| ``decimal``   | i| show this as a signed integer number (this does not perform a cast, it   |
+| ``decimal``   | d| show this as a signed integer number (this does not perform a cast, it   |
 |   |  | simply shows the bytes as  an integer with sign) |
 +---+--+--+
 | ``enumeration``   | E| show this as an enumeration, printing the|
@@ -239,6 +239,14 @@
 +---+--+

[Lldb-commits] [PATCH] D63813: Adjust variable formatting table

2019-07-12 Thread Lukas Böger via Phabricator via lldb-commits
lubgr added a comment.

Gentle ping...


Repository:
  rLLDB LLDB

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D63813/new/

https://reviews.llvm.org/D63813



___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D63813: Adjust variable formatting table

2019-07-17 Thread Lukas Böger via Phabricator via lldb-commits
lubgr updated this revision to Diff 210278.
lubgr added a comment.

I updated the description of the `address` format, is it appropriate? And I 
can't commit that myself, so thanks in advance for doing so when it's ready.


Repository:
  rLLDB LLDB

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D63813/new/

https://reviews.llvm.org/D63813

Files:
  docs/use/variable.rst


Index: docs/use/variable.rst
===
--- docs/use/variable.rst
+++ docs/use/variable.rst
@@ -197,7 +197,7 @@
 
+---+--+--+
 | ``c-string``  | s| show this 
as a 0-terminated C string |
 
+---+--+--+
-| ``decimal``   | i| show this 
as a signed integer number (this does not perform a cast, it   |
+| ``decimal``   | d| show this 
as a signed integer number (this does not perform a cast, it   |
 |   |  | simply 
shows the bytes as  an integer with sign) |
 
+---+--+--+
 | ``enumeration``   | E| show this 
as an enumeration, printing the|
@@ -239,6 +239,15 @@
 
+---+--+--+
 | ``character array``   | a| show this 
as a character array   |
 
+---+--+--+
+| ``address``   | A| show this 
as an address target (symbol/file/line + offset), possibly |
+|   |  | also the 
string this address is pointing to  |
++---+--+--+
+| ``hex float`` |  | show this 
as hexadecimal floating point  |
++---+--+--+
+| ``instruction``   | i| show this 
as an disassembled opcode  |
++---+--+--+
+| ``void``  | v| don't 
show anything  |
++---+--+--+
 
 Type Summary
 


Index: docs/use/variable.rst
===
--- docs/use/variable.rst
+++ docs/use/variable.rst
@@ -197,7 +197,7 @@
 +---+--+--+
 | ``c-string``  | s| show this as a 0-terminated C string |
 +---+--+--+
-| ``decimal``   | i| show this as a signed integer number (this does not perform a cast, it   |
+| ``decimal``   | d| show this as a signed integer number (this does not perform a cast, it   |
 |   |  | simply shows the bytes as  an integer with sign) |
 +---+--+--+
 | ``enumeration``   | E| show this as an enumeration, printing the|
@@ -239,6 +239,15 @@
 +---+--+