如果是命令行debug的话,只要加上 -m pdb。可以看到(Pdb)就可以debug了。看到举例如下:
/grub-master$ python -m pdb util/import_unicode.py unicode/UnicodeData.txt unicode/BidiMirroring.txt unicode/ArabicShaping.txt grub-core/unidata.c
> /home/tao/grub-master/util/import_unicode.py(19)<module>()
-> import re
(Pdb)
输入help 可以得到pdb的所有命令
(Pdb) help
Documented commands (type help <topic>):
========================================
EOF bt cont enable jump pp run unt
a c continue exit l q s until
alias cl d h list quit step up
args clear debug help n r tbreak w
b commands disable ignore next restart u whatis
break condition down j p return unalias where
Miscellaneous help topics:
==========================
exec pdb
Undocumented commands:
======================
retval rv
常用的就是
查看:l
(Pdb) l
14 #*
15 #* You should have received a copy of the GNU General Public License
16 #* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
17 #*
18
19 -> import re
20 import sys
21
22 if len (sys.argv) < 3:
23 print ("Usage: %s SOURCE DESTINATION" % sys.argv[0])
24 exit (0)
断点设置:b + 行号
(Pdb) b 22
Breakpoint 1 at /home/tao/grub-master/util/import_unicode.py:22
继续运行:c
(Pdb) c
> /home/tao/grub-master/util/import_unicode.py(22)<module>()
-> if len (sys.argv) < 3:
查看变量:p
(Pdb) p sys.argv
['util/import_unicode.py', 'unicode/UnicodeData.txt', 'unicode/BidiMirroring.txt', 'unicode/ArabicShaping.txt', 'grub-core/unidata.c']
看到堆栈:bt
(Pdb) bt
/usr/lib/python2.7/bdb.py(400)run()
-> exec cmd in globals, locals
<string>(1)<module>()
> /home/tao/grub-master/util/import_unicode.py(22)<module>()
-> if len (sys.argv) < 3:
单步运行:n
(Pdb) n
> /home/tao/grub-master/util/import_unicode.py(25)<module>()
-> infile = open (sys.argv[3], "r")
(Pdb)
> /home/tao/grub-master/util/import_unicode.py(26)<module>()
-> joining = {}
(Pdb)
> /home/tao/grub-master/util/import_unicode.py(27)<module>()
-> for line in infile:
(Pdb)
> /home/tao/grub-master/util/import_unicode.py(28)<module>()
-> line = re.sub ("#.*$", "", line)
退出:q
第二中方式是在原文件中加测试点,相当于断点
首先在源文件中埋断点:
for line in infile:
line = re.sub ("#.*$", "", line)
line = line.replace ("\n", "")
line = line.replace (" ", "")
if len (line) == 0 or line[0] == '\n':
continue
sp = line.split (";")
curcode = int (sp[0], 16)
import pdb
pdb.set_trace()
然后直接运行就可以看到程序停在我们加pdb.set_trace()的下一行了
~/grub-master$ python util/import_unicode.py unicode/UnicodeData.txt unicode/BidiMirroring.txt unicode/ArabicShaping.txt grub-core/unidata.c
> /home/tao/grub-master/util/import_unicode.py(37)<module>()
-> if sp[2] == "U":
/grub-master$ python -m pdb util/import_unicode.py unicode/UnicodeData.txt unicode/BidiMirroring.txt unicode/ArabicShaping.txt grub-core/unidata.c
> /home/tao/grub-master/util/import_unicode.py(19)<module>()
-> import re
(Pdb)
输入help 可以得到pdb的所有命令
(Pdb) help
Documented commands (type help <topic>):
========================================
EOF bt cont enable jump pp run unt
a c continue exit l q s until
alias cl d h list quit step up
args clear debug help n r tbreak w
b commands disable ignore next restart u whatis
break condition down j p return unalias where
Miscellaneous help topics:
==========================
exec pdb
Undocumented commands:
======================
retval rv
常用的就是
查看:l
(Pdb) l
14 #*
15 #* You should have received a copy of the GNU General Public License
16 #* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
17 #*
18
19 -> import re
20 import sys
21
22 if len (sys.argv) < 3:
23 print ("Usage: %s SOURCE DESTINATION" % sys.argv[0])
24 exit (0)
断点设置:b + 行号
(Pdb) b 22
Breakpoint 1 at /home/tao/grub-master/util/import_unicode.py:22
继续运行:c
(Pdb) c
> /home/tao/grub-master/util/import_unicode.py(22)<module>()
-> if len (sys.argv) < 3:
查看变量:p
(Pdb) p sys.argv
['util/import_unicode.py', 'unicode/UnicodeData.txt', 'unicode/BidiMirroring.txt', 'unicode/ArabicShaping.txt', 'grub-core/unidata.c']
看到堆栈:bt
(Pdb) bt
/usr/lib/python2.7/bdb.py(400)run()
-> exec cmd in globals, locals
<string>(1)<module>()
> /home/tao/grub-master/util/import_unicode.py(22)<module>()
-> if len (sys.argv) < 3:
单步运行:n
(Pdb) n
> /home/tao/grub-master/util/import_unicode.py(25)<module>()
-> infile = open (sys.argv[3], "r")
(Pdb)
> /home/tao/grub-master/util/import_unicode.py(26)<module>()
-> joining = {}
(Pdb)
> /home/tao/grub-master/util/import_unicode.py(27)<module>()
-> for line in infile:
(Pdb)
> /home/tao/grub-master/util/import_unicode.py(28)<module>()
-> line = re.sub ("#.*$", "", line)
退出:q
第二中方式是在原文件中加测试点,相当于断点
首先在源文件中埋断点:
for line in infile:
line = re.sub ("#.*$", "", line)
line = line.replace ("\n", "")
line = line.replace (" ", "")
if len (line) == 0 or line[0] == '\n':
continue
sp = line.split (";")
curcode = int (sp[0], 16)
import pdb
pdb.set_trace()
然后直接运行就可以看到程序停在我们加pdb.set_trace()的下一行了
~/grub-master$ python util/import_unicode.py unicode/UnicodeData.txt unicode/BidiMirroring.txt unicode/ArabicShaping.txt grub-core/unidata.c
> /home/tao/grub-master/util/import_unicode.py(37)<module>()
-> if sp[2] == "U":