如何追溯调试Python异常
我想找个办法来“回头”调试一个Python的异常。简单来说,就是如果我的程序抛出了一个没有处理的异常,我希望它能保存下当时的程序状态,这样我就可以稍后回去调试这个问题。
我看过pdb的文档,似乎可以做到这一点,但前提是你能在异常发生的那一刻与程序进行互动。对我来说这不行,因为我的程序会在后台运行(没有控制终端)。
我最开始的尝试(注定失败!)是把一个try/except块放在程序的最高层,在except块里提取当前异常的回溯对象,然后用pickle把它写入磁盘。我打算再写一个单独的程序来解压这个对象,并用pdb.post_mortem来调试崩溃的程序。但是回溯对象是不能被pickle的,而且我也不指望这样能成功,因为它并不能保存整个程序的状态。
5 个回答
0
你可以在最上层创建一个完全独立的执行环境:
myEnv = {}
myEnv.update(globals)
然后在这个执行环境中运行你的代码。如果出现了错误,你可以得到错误的追踪信息(也就是错误发生时的调用记录)和所有的全局变量,这样你就能比较清楚地重建程序的状态。
0
你可以使用 twisted.python 这个库,把错误信息写到一个文件里,这样你就能得到一个完整的错误追踪信息,包括具体的异常情况。
1
根据我所知道的,似乎没有办法做到你所要求的。不过,听起来你可能是在寻找一个远程调试工具。这里有几个选择:
- rconsole - 这其实不算是一个调试器,但它可以让你在另一个进程中获得一个交互式的命令行。这在调试的时候可能会很有用。我没有试过这个,但看起来相对简单。
- rpdb2的嵌入式调试器 - 这个工具可以让你启动一个调试器,然后从另一个命令行连接到它。