cs01 / pygdbmi

A library to parse gdb mi output and interact with gdb subprocesses
https://cs01.github.io/pygdbmi
MIT License
220 stars 47 forks source link

Support for Intel's MPI debugging #102

Open lsmenicucci opened 1 year ago

lsmenicucci commented 1 year ago

When starting gdb from intel's mpirun using:

mpirun -gdb -gdb-args --interpreter=mi3 -n 2 ./my-prog 

output has an leading indicator of which processes are being debugged, for example:

[0,1] (mpigdb) run

which breaks the output parsing. By proxying the gdbmiparser.parse_response I can easily restore the structured output:

mpigdb_prefix = re.compile(r"^\s*(\(mpigdb\))?\s*\[[0-9,]+\]\s")
parse = gdbmiparser.parse_response 

def new_parse(a0, *args, **kwargs):
    newa0 = mpigdb_prefix.sub("", a0) 
    return parse(newa0, *args, **kwargs)

gdbmiparser.parse_response = new_parse

But the mpi rank information is lost. It would be nice if such information could be included in the parsed output.

barisione commented 1 year ago

I'm not familiar with mpirun, but its behaviour is a bit annoying as that's not valid MI 😞

lsmenicucci commented 1 year ago

Yes, although it seems that the only difference is the prepended (0,1) (mpigdb) I haven't found any mpich/intel mpi documentation pointing that out. I've also had some random errors while parsing because there is an apparent race condition between the processes output and the MI output.

What really solved these issues was redirecting the gdb output to a file by enabling logging, like:

set pagination off
set logging file gdb.log 
set logging overwrite on

And then parse the gdb.log content with pygdbmi.gdbmiparser.