How to debug python script in C level using GDB. Give me a simple example for this
Asked Answered
W

2

8

How to debug python script in C level using GDB. Give me a simple example for this.My primary goal is to get the trace of libc function called from my python script.

Woodsum answered 26/7, 2018 at 11:40 Comment(5)
Please say you're using ctypes or trying to do a low-level hack... And that you've got the debug version of Python.Filose
Yes, I am using python-devel version. Also I want to do a low-level hackWoodsum
Oh, good. You get an up vote then. Any particular reason you've picked Python 2 for your hack?Filose
I need to go for both python 2 and 3.. starting from python 2 for nowWoodsum
You can follow instructions on wiki.python.org/moin/DebuggingWithGdb to debug python script. To get the trace of libc function you can set a breakpoint on it with b <libc function name>.Tramel
T
4

See the thing is for binary(.so) files, you surely cannot apply breakpoint to a particular line, but surely you can apply breakpoint to a function. Say using

(gdb) b func_name

you can easily apply breakpoint to a function and thereby obtain the backtrace whenever the breakpoint is found. First run your python sc

  1. Start gdb:

    gdb -ex r --args python demo.py
    
  2. Apply breakpoint:

    (gdb) b func_name
    
  3. Run:

    (gdb) run
    

This should work for your case.

Trainer answered 27/7, 2018 at 11:28 Comment(1)
So where would this look for function "func_name". I need to know this. This would play a crucial role in my case.Woodsum
S
1

You can always Python using gdb and set breakpoints as you like

gdb -ex r --args python script.py args

If you want to look what happens in Python while running Python script I suggest to use mixed mode

gdb -ex r --args python -m pdb script.py

This way, you can break in pdb, then press Ctrl-C and end up inside gdb. Then, bt will give you stack trace inside Python.

Siphonostele answered 27/7, 2018 at 8:7 Comment(2)
So where to add breakpoints in such a case? say for a c file abc.c, I add "b abc.c:10"... but for the python file, I cannot add the breakpoint directly to python as far as my understanding goes. The c files used here would be the binary(.so) files... how to add breakpoint to them now?Woodsum
You also need: python-debuginfo packageSiphonostele

© 2022 - 2024 — McMap. All rights reserved.