python -m pdb myscript.py #注意這會重啓myscript.py
可以在程序中這麼設置斷點:
import pdb; pdb.set_trace()
可以修改變量的值,但是要注意,前面加上!比如要修改final的值,應該這樣!final="newvalue"
支持的命令:
p 打印變量
n next
step 細點運行
c continue
l list
a args 打印當前函數的參數
condition bpnumber [condition]
clear/disable/enable 清除/禁用/使能斷點
q quit
ncalls | 函數的被調用次數 |
tottime | 函數總計運行時間,除去函數中調用的函數運行時間 |
percall | 函數運行一次的平均時間,等於tottime/ncalls |
cumtime | 函數總計運行時間,含調用的函數運行時間 |
percall | 函數運行一次的平均時間,等於cumtime/ncalls |
filename:lineno(function) | 函數所在的文件名,函數的行號,函數名 |
# …略
if __name__ == "__main__":
import profile
profile.run("foo()", "prof.txt")
import pstats
p = pstats.Stats("prof.txt")
p.sort_stats("time").print_stats()
|
strip_dirs() | 用以除去文件名前名的路徑信息。 |
add(filename,[…]) | 把profile的輸出文件加入Stats實例中統計 |
dump_stats(filename) | 把Stats的統計結果保存到文件 |
sort_stats(key,[…]) | 最重要的一個函數,用以排序profile的輸出 |
reverse_order() | 把Stats實例裏的數據反序重排 |
print_stats([restriction,…]) | 把Stats報表輸出到stdout |
print_callers([restriction,…]) |
輸出調用了指定的函數的函數的相關信息
|
print_callees([restriction,…]) | 輸出指定的函數調用過的函數的相關信息 |
‘ncalls’ | 被調用次數 |
‘cumulative’ | 函數運行的總時間 |
‘file’ | 文件名 |
‘module’ | 文件名 |
‘pcalls’ | 簡單調用統計(兼容舊版,未統計遞歸調用) |
‘line’ | 行號 |
‘name’ | 函數名 |
‘nfl’ | Name/file/line |
‘stdname’ | 標準函數名 |
‘time’ | 函數內部運行時間(不計調用子函數的時間) |
python -m cProfile -s time test.py
>>> t = timeit.Timer("t = foo()/nprint t") ß被timeit的代碼段
>>> t.timeit()
Traceback (most recent call last):
File "<pyshell#12>", line 1, in -toplevel-
t.timeit()
File "E:/Python23/lib/timeit.py", line 158, in timeit
return self.inner(it, self.timer)
File "<timeit-src>", line 6, in inner
foo() ß標準輸出是這樣的
NameError: global name 'foo' is not defined
>>> try:
t.timeit()
except:
t.print_exc()
Traceback (most recent call last):
File "<pyshell#17>", line 2, in ?
File "E:/Python23/lib/timeit.py", line 158, in timeit
return self.inner(it, self.timer)
File "<timeit-src>", line 6, in inner
t = foo() ßprint_exc()的輸出是這樣的,方便定位錯誤
NameError: global name 'foo' is not defined
|