如何使用GDB在C级调试python脚本。给我一个简单的例子

时间:2018-07-26 11:40:17

标签: python python-2.7 debugging gdb gdb-python

如何使用GDB在C级调试python脚本。给我举一个简单的例子。我的主要目标是从我的python脚本中获取libc函数的踪迹。

2 个答案:

答案 0 :(得分:3)

看到问题是针对二进制(.so)文件,您肯定不能将断点应用于特定的行,但是可以确定地可以将断点应用于函数。 说使用

template<class T> class Class;
template<typename>
struct fs;

template<class T> class Class {
protected: // this could be private
    T m_t;
public:
    Class(): m_t(T()) {}
    Class(T t): m_t(t) {}
    T& getT() { return m_t; }
    friend struct fs<T>;
};

template<typename T>
struct fs
{
    template<typename W>
    static Class<W> f(Class<T>& C, const Class<T>& D)
    {
        C.m_t += D.m_t;
        Class<W> R;
        std::cout << R.m_t << std::endl; // ill-formed
        return R;
    }
};

template<class T, class W>
Class<W> f(Class<T>& C, const Class<T>& D)
{
    return fs<T>::template f<W>(C, D);
}

您可以轻松地将断点应用于函数,从而在找到断点时获取回溯。 首先运行您的python sc 1.启动gdb:

(gdb) b func_name

  1. 应用断点:

gdb -ex r --args python demo.py

  1. 运行:

(gdb) b func_name

这应该适合您的情况。

答案 1 :(得分:1)

您始终可以使用gdb使用Python并根据需要设置断点

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

如果您想查看在运行Python脚本时Python会发生什么,我建议使用混合模式

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

这样,您可以打入pdb,然后按Ctrl-C并最终进入gdb。然后,bt将为您提供Python内部的堆栈跟踪。