如何使用GDB在C级调试python脚本。给我举一个简单的例子。我的主要目标是从我的python脚本中获取libc函数的踪迹。
答案 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
gdb -ex r --args python demo.py
(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内部的堆栈跟踪。