gpt4 book ai didi

python - 多线程 Python 代码中的 Emacs pdb 和断点问题

转载 作者:太空宇宙 更新时间:2023-11-03 11:35:46 25 4
gpt4 key购买 nike

我正在使用 python.el 运行 Emacs 23.2,并使用 pdb 调试一些 Python 代码。

我的代码使用 threading 模块生成了一个同级线程,并且我在 run() 方法的开头设置了一个断点,但是断点从未被 处理过code>pdb 即使代码确实可以运行并且适用于所有意图和目的。

我的印象是我可以使用 pdb任何 线程中建立断点,尽管实际上不支持完整的多线程调试。

我假设 pdbM-x pdb 调用可以在任何线程中中断是错误的吗?如果您不相信我,请亲自尝试这个最小的示例。

import threading

class ThreadTest(threading.Thread):
def __init__(self,):
threading.Thread.__init__(self)

def run(self):
print "Type M-x pdb, set a breakpoint here then type c <RET>..."
print "As you can see it does not break!"

if __name__ == '__main__':
tt = ThreadTest()

tt.start()

感谢 Pierre 和他所引用的书籍文本,我尝试了包含 pdb.set_trace() 的选项,如下所示:

def run(self):
import pdb; pdb.set_trace()
print "Set a breakpoint here then M-x pdb and type c..."

但这只会中断并为 step、next、continue 等提供 pdb 控件,如果它是从控制台执行并直接在 Python 解释器中运行的话,而且至关重要不是 通过 M-x pdb - 至少对于我的 Emacs 和 pdb 配置。

所以我原来的问题可以改写一下:

有没有一种方法可以从 Emacs 中调用 Python 程序,该程序使用 pdb 的内联调用(从而支持多线程应用程序中的中断),并自动神奇地建立一个 pdb comint 控制缓冲区?

如果我使用 M-x pdb 运行我的 Python 应用程序并且它包含 pdb 的内联调用,那么如何最好地处理这导致 pdb-session-within-a-pdb-session 以及相关的失控这一事实?

最佳答案

您使用的是默认的 python.el 吗?我已经放弃了,开始使用 python-mode.el。然后键入 M-x shell,从提示符键入 python myproblem.py(当然替换为您的程序名称),它会在 set_trace 处停止线。它与 pdb 集成开箱即用。 (它适用于您的程序)。

关于python - 多线程 Python 代码中的 Emacs pdb 和断点问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3867892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com