【问题标题】:Understanding pdb output after pdb.set_trace()了解 pdb.set_trace() 之后的 pdb 输出
【发布时间】:2018-06-15 01:56:15
【问题描述】:

尝试使用 pdb 调试我的基于 python 的 roguelike。我想弄清楚的是,函数 handle_keys() 是否像我问的那样返回 0。我有另一个功能未按预期运行,因此我试图找出问题出在哪里。应该发生的是:handle_keys() 返回 0,然后 frag_grenade() 做一些事情。

我为 pdb 插入了一个回溯,但我不确定它是否会显示 handle_keys() 是否返回 0:

elif key.vk == libtcod.KEY_BACKSPACE:
        game_state = 'playing'
        pdb.set_trace()
        return 0

当我在游戏中按退格键时,我会从 pdb 获得以下输出:

--> 返回 0

我不确定这是显示返回值还是只显示下一行代码......

非常感谢!

【问题讨论】:

  • 如果一个答案解决了您的问题,请考虑accepting它。

标签: python pdb


【解决方案1】:

26.2. pdb — The Python Debugger — Python 2.7.15 documentation:

从正在运行的程序闯入调试器的典型用法是 插入

import pdb; pdb.set_trace()

在您想要进入调试器的位置。然后你可以一步 通过代码遵循此语句,并继续运行 没有使用 c 命令的调试器。

箭头指向当前行,即将被执行。

返回值的打印方式完全不同:

In [11]: def answer():
    ...:     return 42

In [13]: pdb.runeval("answer()")
> <string>(1)<module>()->None
(Pdb) s
--Call--
> <ipython-input-11-22e067ec9c24>(1)answer()
-> def answer():
(Pdb) n
> <ipython-input-11-22e067ec9c24>(2)answer()
-> return 42
(Pdb)
--Return--
> <ipython-input-11-22e067ec9c24>(2)answer()->42
-> return 42
(Pdb)

如您所见,返回的行被打印了两次——第一次是在执行之前,然后是函数返回时。第二次,在定位行中伴随--Return--和返回值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 2012-10-21
    • 2018-09-22
    • 2019-02-18
    相关资源
    最近更新 更多