mirror of
https://github.com/epasveer/seer.git
synced 2026-08-30 09:00:42 +08:00
53 lines
2.1 KiB
Plaintext
53 lines
2.1 KiB
Plaintext
|
|
Online doc for writing mi commands in python.
|
|
|
|
https://sourceware.org/gdb/current/onlinedocs/gdb.html/GDB_002fMI-Commands-In-Python.html#GDB_002fMI-Commands-In-Python
|
|
https://sourceware.org/gdb/current/onlinedocs/gdb.html/Basic-Python.html#Basic-Python
|
|
|
|
The following code snippet shows how some trivial MI commands can be implemented in Python:
|
|
|
|
class MISkip(gdb.MICommand):
|
|
"""Run the 'skip' command."""
|
|
|
|
def __init__(self, name, mode):
|
|
self._mode = mode
|
|
super(MISkip, self).__init__(name)
|
|
|
|
def invoke(self, argv):
|
|
if self._mode == 'dict':
|
|
return { 'dict': { 'argv' : argv } }
|
|
elif self._mode == 'list':
|
|
return { 'list': gdb.execute ("info skip", to_string=True) }
|
|
else:
|
|
return { 'string': ", ".join(argv) }
|
|
|
|
|
|
MISkip("-skip-list", "list")
|
|
|
|
The last line instantiate the class, creating one new GDB/MI commands -skip-list.
|
|
Each time a subclass of gdb.MICommand is instantiated, the new command is automatically registered with GDB.
|
|
|
|
Source the py file at the gdb prompt.
|
|
|
|
(gdb) source MISkip.py
|
|
|
|
Depending on how the Python code is read into GDB, you may need to import the gdb module explicitly.
|
|
|
|
The following example shows a GDB session in which the above commands have been added:
|
|
|
|
(gdb)
|
|
-skip-list
|
|
^done,list="Num Enb Glob File RE Functionn1 y n <none> n std::vector<int, std::allocator<int> >::back()n2 y n <none> n std::unique_ptr<int, std::default_delete<int> >::operator*() constn"
|
|
|
|
^done,list="Num Enb Glob File RE Functionn
|
|
1 y n <none> n std::vector<int, std::allocator<int> >::back()n
|
|
2 y n <none> n std::unique_ptr<int, std::default_delete<int> >::operator*() constn"
|
|
|
|
Run Seer this way:
|
|
|
|
$ /usr/local/bin/seergdb --project=project.seer
|
|
|
|
[ ] The return string has 'n' characters but I think they should be '\n'. Seer parsing bug with escaped '\n'????
|
|
[ ] Handle the parsing of the return string and return a python table.
|
|
|