在程序执行之后

2024-05-28 23:50:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在看一个程序执行的过程。例如,我想跟踪程序在执行过程中发生变化时的堆栈指针。我一直在研究用python编写GDB脚本,但是解决这个问题的方法非常麻烦——到目前为止,我在安装PythonGDB时还没有成功。如果有人对如何处理这个问题有任何解决方案/建议,我将非常感激。你知道吗

编辑:我应该提到,我正在寻找记录这些值-理想情况下自动-以便能够审查他们之后。我知道GDB允许我一步一步地浏览程序并查看每个状态,但我想自动化这个过程,以便能够“观察”特定值(如SP)如何随时间变化。你知道吗


Tags: 方法程序脚本编辑堆栈过程记录情况
2条回答

这是带有调试信息的测试程序的SystemTap解决方案:

第一个测试C++程序(用g++g构建)主.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

ubiQ公司

我总是用空闲来调试。用谷歌搜索一下。希望这有帮助,如果没有,让我知道!你知道吗

相关问题 更多 >

    热门问题