在pdb模式下基本都是单个字母完成调试中的命令,命令列表网上很多。
-
起步,调试模式打开py文件(-m的意思是将库中的python模块用作脚本去运行)。
python -m pdb test.py
-
用l(l就是list的意思)看看文件里面有什么(很常用的命令)。
它不会显示全部文件,只会显示当前运行行的上下几行代码,其中->指向的就是当前的运行的哪一行(注释和空行是直接跳过的),因为是刚开始,所以是第一个import(19是代码在文件中的行数)。(Pdb) l
19 -> import sys
-
用n(next)命令来执行到下一行,可以一直用n来一步一步看。
-
用s进入一个函数,比如运行的箭头指向的代码是调用某一个函数(这个函数可以在任何其他文件中),s命令就会跳转到那个函数定义的地方,就像pycharm中的ctrl+鼠标左键命令一样,如果当前行不是函数的话,s的作用和n是一样的。
-
用r退出一个函数,就是运行完这个函数,然后return。
-
命令b(break)打断点,如下是在pdb的命令行,选择在根目录下的test.py文件的第100行打断点。
如果是只使用当前一个py文件,则用b 12在12行打断点。(Pdb) b /test.py:440
-
命令c就是一直运行到遇到断点或者结束。
-
显示一个变量的值( 假设我在代码中定义了dict_1):
(Pdb)p dict_1
-
退出:q 或者exit。
注意,如果在循环的位置(比如for的哪一行)加断点,则执行到这之后,如果用一次c命令,它会循环一次后停到开始的位置,有多少次循环就会停多少次。
-
遇到报错:ConfigurationError: unable to access signing_dir /var/cache/neutron
用sudo运行Python的pdb -
遇到报错:
RuntimeError: Could not bind to 0.0.0.0:9696 after trying for 30 seconds
说明端口9696被占用,可以查看:lsof -i:9696,重启neutron可以
关闭命令:systemctl stop devstack@q-svc.service -
Python pdb启动调试neutron服务。
python -m pdb /usr/local/bin/neutron-server --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini
如果报错:
Traceback (most recent call last): File
“/usr/lib/python2.7/runpy.py”, line 163, in _run_module_as_main
mod_name, _Error) File “/usr/lib/python2.7/runpy.py”, line 102, in _get_module_details
loader = get_loader(mod_name) File “/usr/lib/python2.7/pkgutil.py”, line 462, in get_loader
return find_loader(fullname) File “/usr/lib/python2.7/pkgutil.py”, line 473, in find_loader
loader = importer.find_module(fullname) File “/usr/lib/python2.7/pkgutil.py”, line 181, in find_module
path = [os.path.realpath(self.path)] File “/usr/lib/python2.7/posixpath.py”, line 383, in realpath
return abspath(path) File “/usr/lib/python2.7/posixpath.py”, line 371, in abspath
cwd = os.getcwd() OSError: [Errno 2] No such file or directory
可能换一个新的命令行窗口就好了。