我希望在执行时“观察”一个程序。例如,我希望跟踪程序的堆栈指针,因为它会在执行过程中发生变化。我一直在寻找使用python编写GDB脚本但是这个解决方案非常错误 - 到目前为止我在安装PythonGDB时都没有成功。如果有人对如何解决这个问题有任何解决方案/建议,我将非常感激。
编辑:我应该提到,我希望记录这些值 - 理想情况下是自动 - 以便能够在之后查看它们。我理解GDB允许我逐步完成程序并查看每个状态,但我想自动化这个过程,以便能够“观察”特定值(例如SP)如何随时间变化。
答案 0 :(得分:1)
这是一个带有调试信息的测试程序的SystemTap解决方案:
首先是一个测试C ++程序(使用g ++ -g main.cpp构建):
>cat main.cpp
void a()
{
char arr[12800];
}
void b()
{
char arr[1280];
a();
}
void c()
{
char arr[128];
b();
}
int main()
{
char arr[12];
c();
return 0;
}
然后是SystemTap脚本:
>cat measure_f.stp
probe process("a.out").function("*")
{
printf("%-10s: rbp:%x, rsp:%x, %d\n", probefunc(), register("rbp"), register("rsp"), register("rbp") - register("rsp"))
}
然后是测试本身:
>sudo stap measure_f.stp -c ./a.out
main : rbp:7fffd3707a10, rsp:7fffd3707a00, 16
c : rbp:7fffd37079f0, rsp:7fffd3707970, 128
b : rbp:7fffd3707960, rsp:7fffd3707460, 1280
a : rbp:7fffd3707450, rsp:7fffd37042c8, 12680
答案 1 :(得分:0)
UBIQ,
我一直用IDLE进行调试。谷歌搜索它。希望这有帮助,如果没有,请告诉我!