各位兄台,今天学习 pdb 调试程序遇到一个异常退出的问题,不知道是哪里的问题
$ cat debug_test.py
#!/usr/bin/python2
# coding=utf8
hello='string: hello'
world='string: world'
def foo():
text = "hello world"
return text
import pdb
pdb.set_trace()
ret=foo()
print ret
这断代码,执行进入 pdb 后
1. 输入 'n' 单步调试,调试到结束后,会异常退出
$ python debug_test.py
> /home/i/me/debug_test.py(14)<module>()
-> ret=foo()
(Pdb) n
> /home/i/me/debug_test.py(15)<module>()
-> print ret
(Pdb) n
hello world
--Return--
> /home/i/me/debug_test.py(15)<module>()->None
-> print ret
(Pdb) n
Exception AttributeError: "'NoneType' object has no attribute 'path'" in <function _remove at 0x13a9668> ignored
2. 输入 'q' 退出,会抛出异常,而不是正常退出
$ python debug_test.py
> /home/i/me/debug_test.py(14)<module>()
-> ret=foo()
(Pdb) q
Traceback (most recent call last):
File "debug_test.py", line 14, in <module>
ret=foo()
File "debug_test.py", line 14, in <module>
ret=foo()
File "/usr/lib/python2.7/bdb.py", line 49, in trace_dispatch
return self.dispatch_line(frame)
File "/usr/lib/python2.7/bdb.py", line 68, in dispatch_line
if self.quitting: raise BdbQuit
bdb.BdbQuit
3. 用 python2 -m pdb debug_test.py 这种调试方法
a. 按 'n' 调试到脚本最后,可以继续从头再调试一次,而不是异常退出
b. 按 'q' 退出是正常
但命令行参数调试方式,是从 *第一行* 开始的,不能像 pdb.set_trace() 可以在脚本中指定调试位置灵活
请各位兄台,帮忙诊断一下,问题在哪里?谢谢 :)
$ cat debug_test.py
#!/usr/bin/python2
# coding=utf8
hello='string: hello'
world='string: world'
def foo():
text = "hello world"
return text
import pdb
pdb.set_trace()
ret=foo()
print ret
这断代码,执行进入 pdb 后
1. 输入 'n' 单步调试,调试到结束后,会异常退出
$ python debug_test.py
> /home/i/me/debug_test.py(14)<module>()
-> ret=foo()
(Pdb) n
> /home/i/me/debug_test.py(15)<module>()
-> print ret
(Pdb) n
hello world
--Return--
> /home/i/me/debug_test.py(15)<module>()->None
-> print ret
(Pdb) n
Exception AttributeError: "'NoneType' object has no attribute 'path'" in <function _remove at 0x13a9668> ignored
2. 输入 'q' 退出,会抛出异常,而不是正常退出
$ python debug_test.py
> /home/i/me/debug_test.py(14)<module>()
-> ret=foo()
(Pdb) q
Traceback (most recent call last):
File "debug_test.py", line 14, in <module>
ret=foo()
File "debug_test.py", line 14, in <module>
ret=foo()
File "/usr/lib/python2.7/bdb.py", line 49, in trace_dispatch
return self.dispatch_line(frame)
File "/usr/lib/python2.7/bdb.py", line 68, in dispatch_line
if self.quitting: raise BdbQuit
bdb.BdbQuit
3. 用 python2 -m pdb debug_test.py 这种调试方法
a. 按 'n' 调试到脚本最后,可以继续从头再调试一次,而不是异常退出
b. 按 'q' 退出是正常
但命令行参数调试方式,是从 *第一行* 开始的,不能像 pdb.set_trace() 可以在脚本中指定调试位置灵活
请各位兄台,帮忙诊断一下,问题在哪里?谢谢 :)