Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 如何使用GDB编辑python 2.7全局变量?_Python 2.7 - Fatal编程技术网

Python 2.7 如何使用GDB编辑python 2.7全局变量?

Python 2.7 如何使用GDB编辑python 2.7全局变量?,python-2.7,Python 2.7,我有一个脚本已经运行了好几天,大约完成了一半。它有一个愚蠢的bug,如果某个计数器太高,它会在完成之前崩溃(计数器没有使用;我不介意弄坏它以保持脚本运行)。我没有远见导入一个模块或编写一个后门来让我以任何方式改变状态;有人告诉我,我仍然可以使用gdb到达柜台 为了简单起见,想象一下,我在下面讨论的是这个脚本,我从命令行以“python foo.py”的形式运行它 为了将变量I的值更改为0并避免爆炸,我需要不时在gdb中输入什么?(如果有必要的话,我的python二进制代码是2.7.3)。继续前进

我有一个脚本已经运行了好几天,大约完成了一半。它有一个愚蠢的bug,如果某个计数器太高,它会在完成之前崩溃(计数器没有使用;我不介意弄坏它以保持脚本运行)。我没有远见导入一个模块或编写一个后门来让我以任何方式改变状态;有人告诉我,我仍然可以使用gdb到达柜台

为了简单起见,想象一下,我在下面讨论的是这个脚本,我从命令行以“python foo.py”的形式运行它


为了将变量I的值更改为0并避免爆炸,我需要不时在gdb中输入什么?(如果有必要的话,我的python二进制代码是2.7.3)。

继续前进,我自己完成了。这对我来说很有用(没有显示-‘file’从进程加载python二进制文件‘attach’;‘detach’):

  • “bt”-查看堆栈跟踪
  • “frame foo”-其中foo是第一个提到“globals”作为Py*函数参数的框架
  • “打印全局文件”(或,打印
    *(PyDictObject*)全局文件)
    -确认 有变量吗
  • “向下”-移动到您感兴趣的框架下方
  • “finish”-(可能没有必要?)-让python完成它正在做的任何事情,并释放任何可能干扰与globals对象接口的锁或其他
  • “调用PyDict_SetItemString(globals,“i”,PyLong_from long(0))”-希望它不会出错。将“i”更改为变量
  • “继续”-如果幸运的话,计数器现在应该重置为0

  • 然而,为了成功,我认为必须在开始运行python进程之前安装/设置python2.7-gdb,否则gdb会看到一个混乱的堆栈。

    我自己完成了。这对我来说很有用(没有显示-‘file’从进程加载python二进制文件‘attach’;‘detach’):

  • “bt”-查看堆栈跟踪
  • “frame foo”-其中foo是第一个提到“globals”作为Py*函数参数的框架
  • “打印全局文件”(或,打印
    *(PyDictObject*)全局文件)
    -确认 有变量吗
  • “向下”-移动到您感兴趣的框架下方
  • “finish”-(可能没有必要?)-让python完成它正在做的任何事情,并释放任何可能干扰与globals对象接口的锁或其他
  • “调用PyDict_SetItemString(globals,“i”,PyLong_from long(0))”-希望它不会出错。将“i”更改为变量
  • “继续”-如果幸运的话,计数器现在应该重置为0
  • 然而,为了成功,我认为必须在开始运行python进程之前安装/设置python2.7-gdb,否则gdb将看到一个混乱的堆栈

    from time import sleep
    i = 0
    while(True):
        i += 1
        if (i > 100):
            raise Exception("Explosion")
        sleep(10)