trace --- 追蹤或追查 Python 陳述式執行¶
原始碼:Lib/trace.py
trace 模組可用來追蹤程式執行過程、產生帶註解的陳述式涵蓋範圍清單、輸出呼叫者/被呼叫者的關係,以及在程式執行期間被執行的函式串列。它可以在其他程式中使用,也可以從命令列啟動。
也參考
- Coverage.py
一款受歡迎的第三方涵蓋範圍工具,提供 HTML 輸出與分支涵蓋等進階功能。
命令列用法¶
trace 模組可從命令列執行,用法可以非常簡單,如::
python -m trace --count -C . somefile.py ...
上述命令會執行 somefile.py,並將產生執行期間所引入的所有 Python 模組的帶註解串列,輸出至目前目錄。
- --help¶
顯示用法並結束程式。
- --version¶
顯示模組版本並結束程式。
在 3.8 版被加入: 新增 --module 選項,允許執行可執行模組。
主要選項¶
執行 trace 時,至少必須指定以下選項之一。--listfuncs 選項與 --trace 及 --count 選項互斥。當提供 --listfuncs 時,將不接受 --count 或 --trace,反之亦然。
- -c, --count¶
在程式執行結束時產生一組帶註解串列檔案,顯示每個陳述式被執行的次數。參見下方的
--coverdir、--file及--no-report。
- -t, --trace¶
執行時即時顯示每一行。
- -l, --listfuncs¶
顯示程式執行過程中被呼叫的函式。
- -T, --trackcalls¶
顯示程式執行時產生的呼叫關係。
修飾子(Modifier)¶
- -C, --coverdir=<dir>¶
報告檔案的輸出目錄。
package.module的涵蓋範圍報告將寫入檔案:dir/package/module.cover。
- -m, --missing¶
在產生帶註解的串列時,使用
>>>>>>標記未被執行的程式碼行。
- -g, --timing¶
在每一行前加上自程式啟動以來的經過時間。僅在追蹤時使用。
篩選子(Filter)¶
這些選項可以重複使用多次。
- --ignore-module=<mod>¶
忽略所指定的模組名稱及其子模組(若為套件)。引數可以是以逗號分隔的名稱串列。
- --ignore-dir=<dir>¶
忽略指定目錄及其子目錄中的所有模組與套件。引數可以是以
os.pathsep分隔的目錄串列。
程式介面¶
- class trace.Trace(count=1, trace=1, countfuncs=0, countcallers=0, ignoremods=(), ignoredirs=(), infile=None, outfile=None, timing=False)¶
建立一個物件以追蹤單一陳述式或運算式的執行。所有參數皆為可選的。count 啟用行數統計,trace 啟用逐行追蹤執行,countfuncs 可列出執行期間呼叫的函式,countcallers 追蹤呼叫關係,ignoremods 是要忽略的模組或套件名稱串列,ignoredirs 是其模組或套件應被忽略的目錄串列,infile 是讀取儲存計數資料的檔案名稱,outfile 是要寫入更新後計數資料的檔案名稱,timing 則會顯示自開始追蹤以來的時間戳記。
- runctx(cmd, globals=None, locals=None)¶
在指定的全域與區域命名空間中,根據目前的追蹤參數執行命令並收集統計資料。若未指定,globals 與 locals 預設為空字典。
- results()¶
回傳一個
CoverageResults物件,包含指定Trace實例中所有先前對run、runctx與runfunc呼叫的累積結果。不會重設累積的追蹤結果。
- class trace.CoverageResults¶
一個用來儲存涵蓋範圍結果的容器,由
Trace.results()建立。不應由使用者直接建立。- update(other)¶
合併來自另一個
CoverageResults物件的資料。
- write_results(show_missing=True, summary=False, coverdir=None, *, ignore_missing_files=