程序执行后

时间:2013-12-24 17:10:25

标签: python c debugging gdb

我希望在执行时“观察”一个程序。例如,我希望跟踪程序的堆栈指针,因为它会在执行过程中发生变化。我一直在寻找使用python编写GDB脚本但是这个解决方案非常错误 - 到目前为止我在安装PythonGDB时都没有成功。如果有人对如何解决这个问题有任何解决方案/建议,我将非常感激。

编辑:我应该提到,我希望记录这些值 - 理想情况下是自动 - 以便能够在之后查看它们。我理解GDB允许我逐步完成程序并查看每个状态,但我想自动化这个过程,以便能够“观察”特定值(例如SP)如何随时间变化。

2 个答案:

答案 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进行调试。谷歌搜索它。希望这有帮助,如果没有,请告诉我!