You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.8 KiB
77 lines
1.8 KiB
4 months ago
|
# gdb-json-pretty-printer
|
||
|
This is a printer that prints variables in json format.
|
||
|
## Install in GDB
|
||
|
Copy the content in gdbinit into your ~/.gdbinit, replace the path <path_to_gdb_json_printer> by the actual path of gdb_json_printer directory.
|
||
|
## Run tests
|
||
|
First, in the gdb_json_printer directory, compile each example program with O0 optimization
|
||
|
```
|
||
|
g++ test_examples/basic_types.cpp -O0 -g -o test_examples/basic_types
|
||
|
g++ test_examples/objects1.cpp -O0 -g -o test_examples/objects1
|
||
|
g++ test_examples/objects2.cpp -O0 -g -o test_examples/objects2
|
||
|
g++ test_examples/objects.cpp -O0 -g -o test_examples/objects
|
||
|
g++ test_examples/array.cpp -O0 -g -o test_examples/array
|
||
|
g++ test_examples/reference.cpp -O0 -g -o test_examples/reference
|
||
|
```
|
||
|
second, run gdb in the gdb_json_printer directory:
|
||
|
```
|
||
|
gdb
|
||
|
```
|
||
|
finally, source the test script:
|
||
|
```
|
||
|
source test/gdb_json_printer_test.py
|
||
|
```
|
||
|
## printing format
|
||
|
```
|
||
|
Pointer := {
|
||
|
type: 'pointer',
|
||
|
ctype: ctype for pointer,
|
||
|
address: Address,
|
||
|
reference: Struct
|
||
|
}
|
||
|
|
||
|
Struct := {
|
||
|
type: 'struct',
|
||
|
ctype: ctype for struct,
|
||
|
address: Address,
|
||
|
fields: StructField[]
|
||
|
}
|
||
|
|
||
|
StructField := {
|
||
|
field: name of field,
|
||
|
field_type: 'base_class' or 'argument'
|
||
|
value: Value
|
||
|
}
|
||
|
|
||
|
Int := {
|
||
|
type: 'int',
|
||
|
ctype: ctype for int,
|
||
|
address: Address,
|
||
|
value: number
|
||
|
}
|
||
|
|
||
|
Float := {
|
||
|
type: 'float',
|
||
|
ctype: 'float' or 'double',
|
||
|
address: Address,
|
||
|
value: number
|
||
|
}
|
||
|
|
||
|
Enum := {
|
||
|
type: 'enum',
|
||
|
ctype: ctype for enum,
|
||
|
address: Address,
|
||
|
value: number
|
||
|
}
|
||
|
|
||
|
Visit variable := {
|
||
|
type: 'visited',
|
||
|
ctype: ctype for struct,
|
||
|
address: Address,
|
||
|
}
|
||
|
|
||
|
```
|
||
|
|
||
|
## problem to solve
|
||
|
* support for print parent/child class members.
|
||
|
* the printer treats all arrays as pointers now. We expected it to have ability to extract array/buffer length.
|
||
|
* the printer prints smart pointers into a super complex json block. Maybe we need some specific printer for these common objects.
|