Python 如何在另一个模块中设置断点(如果要在函数开始执行时中断,请不要在函数定义行上设置断点)

Python 如何在另一个模块中设置断点(如果要在函数开始执行时中断,请不要在函数定义行上设置断点),python,pdb,Python,Pdb,我试图调试一个模块“main”,它在“另一个_模块”的第356行调用一个函数“breake_function”。我在该函数中有一个错误,希望在其开始处设置一个断点。以下是清单。我做错什么了吗?原因,断点不工作: $ python -m pdb main (Pdb) import sys (Pdb) sys.path.append("/home/user/path/to/another/module") (Pdb) import another_module (Pdb) b another_mod

我试图调试一个模块“main”,它在“另一个_模块”的第356行调用一个函数“breake_function”。我在该函数中有一个错误,希望在其开始处设置一个断点。以下是清单。我做错什么了吗?原因,断点不工作:

$ python -m pdb main
(Pdb) import sys
(Pdb) sys.path.append("/home/user/path/to/another/module")
(Pdb) import another_module
(Pdb) b another_module:356
Breakpoint 1 at /home/user/path/to/another/module/another_module.py:356
(Pdb) c
Traceback (most recent call last):
...
File "/home/user/path/to/another/module/another_module.py", line 383, in broken_function
f=open("../jobs/temptree.tre", "r")
IOError: [Errno 2] No such file or directory: '../jobs/temptree.tre'
Uncaught exception. Entering post mortem debugging
...

您正在正确设置断点。我想它不会停止,因为您正在中断的代码行没有被调用。把断点放在第383行

您也可以直接使用文件和行号设置断点,而无需导入
sys
另一个模块

(Pdb) b /home/user/path/to/another/module/another_module.py:383
Breakpoint 1 at /home/user/path/to/another/module/another_module.py:383
请注意,需要导入
/home/user/path/to/other/module/other_module.py
,第383行需要可执行文件和执行路径,才能中断,其他人已经指出了这一点


要获得更多帮助,请键入
help b
(或者在键入任何其他命令后键入
help
)以获取有关该命令的更多信息。

顺便说一句,您还可以尝试一个硬断点以确保。在第383行插入“import pdb;pdb.set_trace()”您的建议非常有效,但我觉得pdb的行为很奇怪。第356行是函数“def breaked_function():”的第一行。如果我将断点放在注释所在的下一行,pdb会显示“***Blank或comment”,这意味着行的计数没有中断。函数中的断点工作正常。奇怪。。。谢谢你的解决方案!这是正常的行为。您只能挂起一行代码。空行和注释行不是由Python解释器执行的,因此您不能要求解释器在运行它们之前中断。函数定义在Python中不是可执行行。可以在函数的第一个可执行行中断,但不能中断函数名本身。如果使用可选语法“b另一个_模块:断开的_函数”设置断点,即使用函数名而不是行号,则调试器将为您找到第一行并在那里断开。这可能是更好的方法。
b另一个模块:你的函数名
。比原始行号清晰得多,也不那么脆弱。