2011-03-18 Phil Muldoon <pmuldoon@redhat.com>
PR python/12149 * python/python.c (gdbpy_write): Accept a stream argument and operate to the appropriate stream. (gdbpy_flush): Likewise. (_initialize_python): Add stream constants. (finish_python_initialization): Add GdbOutputErrorFile class. 2011-03-18 Phil Muldoon <pmuldoon@redhat.com> PR python/12149 * gdb.texinfo (Basic Python): Update gdb.write and flush text. 2011-03-18 Phil Muldoon <pmuldoon@redhat.com> PR python/12149 * gdb.python/python.exp: Add gdb.write tests.
This commit is contained in:
parent
c20800befe
commit
99c3dc11e4
@ -1,3 +1,13 @@
|
||||
2011-03-18 Phil Muldoon <pmuldoon@redhat.com>
|
||||
|
||||
PR python/12149
|
||||
|
||||
* python/python.c (gdbpy_write): Accept a stream argument and
|
||||
operate to the appropriate stream.
|
||||
(gdbpy_flush): Likewise.
|
||||
(_initialize_python): Add stream constants.
|
||||
(finish_python_initialization): Add GdbOutputErrorFile class.
|
||||
|
||||
2011-03-18 Kwok Cheung Yeung <kcy@codesourcery.com>
|
||||
|
||||
* MAINTAINERS: Add myself as a write-after-approval maintainer.
|
||||
|
@ -1,3 +1,9 @@
|
||||
2011-03-18 Phil Muldoon <pmuldoon@redhat.com>
|
||||
|
||||
PR python/12149
|
||||
|
||||
* gdb.texinfo (Basic Python): Update gdb.write and flush text.
|
||||
|
||||
2011-03-17 Phil Muldoon <pmuldoon@redhat.com>
|
||||
|
||||
* gdb.texinfo (Blocks In Python): Add is_valid method description.
|
||||
|
@ -20877,18 +20877,64 @@ this. For example:
|
||||
@end smallexample
|
||||
@end defun
|
||||
|
||||
@findex gdb.write
|
||||
@defun write string
|
||||
Print a string to @value{GDBN}'s paginated standard output stream.
|
||||
@findex gdb.write
|
||||
@defun write string @r{[}stream{]}
|
||||
Print a string to @value{GDBN}'s paginated output stream. The
|
||||
optional @var{stream} determines the stream to print to. The default
|
||||
stream is @value{GDBN}'s standard output stream. Possible stream
|
||||
values are:
|
||||
|
||||
@table @code
|
||||
@findex STDOUT
|
||||
@findex gdb.STDOUT
|
||||
@item STDOUT
|
||||
@value{GDBN}'s standard output stream.
|
||||
|
||||
@findex STDERR
|
||||
@findex gdb.STDERR
|
||||
@item STDERR
|
||||
@value{GDBN}'s standard error stream.
|
||||
|
||||
@findex STDLOG
|
||||
@findex gdb.STDLOG
|
||||
@item STDLOG
|
||||
@value{GDBN}'s log stream (@pxref{Logging Output}).
|
||||
@end table
|
||||
|
||||
Writing to @code{sys.stdout} or @code{sys.stderr} will automatically
|
||||
call this function.
|
||||
call this function and will automatically direct the output to the
|
||||
relevant stream.
|
||||
@end defun
|
||||
|
||||
@findex gdb.flush
|
||||
@defun flush
|
||||
Flush @value{GDBN}'s paginated standard output stream. Flushing
|
||||
@code{sys.stdout} or @code{sys.stderr} will automatically call this
|
||||
function.
|
||||
Flush the buffer of a @value{GDBN} paginated stream so that the
|
||||
contents are displayed immediately. @value{GDBN} will flush the
|
||||
contents of a stream automatically when it encounters a newline in the
|
||||
buffer. The optional @var{stream} determines the stream to flush. The
|
||||
default stream is @value{GDBN}'s standard output stream. Possible
|
||||
stream values are:
|
||||
|
||||
@table @code
|
||||
@findex STDOUT
|
||||
@findex gdb.STDOUT
|
||||
@item STDOUT
|
||||
@value{GDBN}'s standard output stream.
|
||||
|
||||
@findex STDERR
|
||||
@findex gdb.STDERR
|
||||
@item STDERR
|
||||
@value{GDBN}'s standard error stream.
|
||||
|
||||
@findex STDLOG
|
||||
@findex gdb.STDLOG
|
||||
@item STDLOG
|
||||
@value{GDBN}'s log stream (@pxref{Logging Output}).
|
||||
|
||||
@end table
|
||||
|
||||
Flushing @code{sys.stdout} or @code{sys.stderr} will automatically
|
||||
call this function for the relevant stream.
|
||||
@end defun
|
||||
|
||||
@findex gdb.target_charset
|
||||
|
@ -681,23 +681,69 @@ gdbpy_initialize_events (void)
|
||||
/* Printing. */
|
||||
|
||||
/* A python function to write a single string using gdb's filtered
|
||||
output stream. */
|
||||
output stream . The optional keyword STREAM can be used to write
|
||||
to a particular stream. The default stream is to gdb_stdout. */
|
||||
|
||||
static PyObject *
|
||||
gdbpy_write (PyObject *self, PyObject *args)
|
||||
gdbpy_write (PyObject *self, PyObject *args, PyObject *kw)
|
||||
{
|
||||
char *arg;
|
||||
|
||||
if (! PyArg_ParseTuple (args, "s", &arg))
|
||||
static char *keywords[] = {"text", "stream", NULL };
|
||||
int stream_type = 0;
|
||||
|
||||
if (! PyArg_ParseTupleAndKeywords (args, kw, "s|i", keywords, &arg,
|
||||
&stream_type))
|
||||
return NULL;
|
||||
printf_filtered ("%s", arg);
|
||||
|
||||
switch (stream_type)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
fprintf_filtered (gdb_stderr, "%s", arg);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
fprintf_filtered (gdb_stdlog, "%s", arg);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
fprintf_filtered (gdb_stdout, "%s", arg);
|
||||
}
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
/* A python function to flush gdb's filtered output stream. */
|
||||
/* A python function to flush a gdb stream. The optional keyword
|
||||
STREAM can be used to flush a particular stream. The default stream
|
||||
is gdb_stdout. */
|
||||
|
||||
static PyObject *
|
||||
gdbpy_flush (PyObject *self, PyObject *args)
|
||||
gdbpy_flush (PyObject *self, PyObject *args, PyObject *kw)
|
||||
{
|
||||
gdb_flush (gdb_stdout);
|
||||
static char *keywords[] = {"stream", NULL };
|
||||
int stream_type = 0;
|
||||
|
||||
if (! PyArg_ParseTupleAndKeywords (args, kw, "|i", keywords,
|
||||
&stream_type))
|
||||
return NULL;
|
||||
|
||||
switch (stream_type)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
gdb_flush (gdb_stderr);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
gdb_flush (gdb_stdlog);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
gdb_flush (gdb_stdout);
|
||||
}
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
@ -975,6 +1021,11 @@ Enables or disables printing of Python stack traces."),
|
||||
PyModule_AddStringConstant (gdb_module, "TARGET_CONFIG",
|
||||
(char*) target_name);
|
||||
|
||||
/* Add stream constants. */
|
||||
PyModule_AddIntConstant (gdb_module, "STDOUT", 0);
|
||||
PyModule_AddIntConstant (gdb_module, "STDERR", 1);
|
||||
PyModule_AddIntConstant (gdb_module, "STDLOG", 2);
|
||||
|
||||
/* gdb.parameter ("data-directory") doesn't necessarily exist when the python
|
||||
script below is run (depending on order of _initialize_* functions).
|
||||
Define the initial value of gdb.PYTHONDIR here. */
|
||||
@ -1068,7 +1119,7 @@ class GdbOutputFile:\n\
|
||||
return False\n\
|
||||
\n\
|
||||
def write(self, s):\n\
|
||||
gdb.write(s)\n\
|
||||
gdb.write(s, stream=gdb.STDOUT)\n \
|
||||
\n\
|
||||
def writelines(self, iterable):\n\
|
||||
for line in iterable:\n\
|
||||
@ -1077,9 +1128,28 @@ class GdbOutputFile:\n\
|
||||
def flush(self):\n\
|
||||
gdb.flush()\n\
|
||||
\n\
|
||||
sys.stderr = GdbOutputFile()\n\
|
||||
sys.stdout = GdbOutputFile()\n\
|
||||
\n\
|
||||
class GdbOutputErrorFile:\n\
|
||||
def close(self):\n\
|
||||
# Do nothing.\n\
|
||||
return None\n\
|
||||
\n\
|
||||
def isatty(self):\n\
|
||||
return False\n\
|
||||
\n\
|
||||
def write(self, s):\n\
|
||||
gdb.write(s, stream=gdb.STDERR)\n \
|
||||
\n\
|
||||
def writelines(self, iterable):\n\
|
||||
for line in iterable:\n\
|
||||
self.write(line)\n \
|
||||
\n\
|
||||
def flush(self):\n\
|
||||
gdb.flush()\n\
|
||||
\n\
|
||||
sys.stderr = GdbOutputErrorFile()\n\
|
||||
\n\
|
||||
# Ideally this would live in the gdb module, but it's intentionally written\n\
|
||||
# in python, and we need this to bootstrap the gdb module.\n\
|
||||
\n\
|
||||
@ -1199,10 +1269,9 @@ Return the name of the current target wide charset." },
|
||||
Parse String and return an argv-like array.\n\
|
||||
Arguments are separate by spaces and may be quoted."
|
||||
},
|
||||
|
||||
{ "write", gdbpy_write, METH_VARARGS,
|
||||
{ "write", (PyCFunction)gdbpy_write, METH_VARARGS | METH_KEYWORDS,
|
||||
"Write a string using gdb's filtered stream." },
|
||||
{ "flush", gdbpy_flush, METH_NOARGS,
|
||||
{ "flush", (PyCFunction)gdbpy_flush, METH_VARARGS | METH_KEYWORDS,
|
||||
"Flush gdb's filtered stdout stream." },
|
||||
{ "selected_thread", gdbpy_selected_thread, METH_NOARGS,
|
||||
"selected_thread () -> gdb.InferiorThread.\n\
|
||||
|
@ -1,3 +1,9 @@
|
||||
2011-03-18 Phil Muldoon <pmuldoon@redhat.com>
|
||||
|
||||
PR python/12149
|
||||
|
||||
* gdb.python/python.exp: Add gdb.write tests.
|
||||
|
||||
2010-03-17 Phil Muldoon <pmuldoon@redhat.com>
|
||||
|
||||
* gdb.python/Makefile.in: Add py-objfile.
|
||||
|
@ -170,3 +170,11 @@ gdb_test "python print len(symtab)" "2" "Test decode_line func1 length"
|
||||
gdb_test "python print len(symtab\[1\])" "1" "Test decode_line func1 length"
|
||||
gdb_test "python print symtab\[1\]\[0\].symtab" "gdb/testsuite/gdb.python/python-1.c.*" "Test decode_line func1 filename"
|
||||
gdb_test "python print symtab\[1\]\[0\].line" "19" "Test decode_line func1 line number"
|
||||
|
||||
# gdb.write
|
||||
gdb_test "python print sys.stderr" ".*__main__.GdbOutputErrorFile instance at.*" "Test stderr location"
|
||||
gdb_test "python print sys.stdout" ".*__main__.GdbOutputFile instance at.*" "Test stdout location"
|
||||
gdb_test "python gdb.write(\"Foo\\n\")" "Foo" "Test default write"
|
||||
gdb_test "python gdb.write(\"Error stream\\n\", stream=gdb.STDERR)" "Error stream" "Test stderr write"
|
||||
gdb_test "python gdb.write(\"Normal stream\\n\", stream=gdb.STDOUT)" "Normal stream" "Test stdout write"
|
||||
gdb_test "python gdb.write(\"Log stream\\n\", stream=gdb.STDLOG)" "Log stream" "Test stdlog write"
|
||||
|
Loading…
Reference in New Issue
Block a user