trace --- Theo dõi hoặc theo dõi việc thực thi câu lệnh Python

Source code: Lib/trace.py


Mô-đun trace cho phép bạn theo dõi việc thực hiện chương trình, tạo danh sách bao phủ câu lệnh có chú thích, in mối quan hệ người gọi/người gọi và liệt kê các chức năng được thực hiện trong quá trình chạy chương trình. Nó có thể được sử dụng trong một chương trình khác hoặc từ dòng lệnh.

Xem thêm

Coverage.py

Một công cụ bảo hiểm phổ biến của bên thứ ba cung cấp đầu ra HTML cùng với các tính năng nâng cao như bảo hiểm chi nhánh.

Sử dụng dòng lệnh

Mô-đun trace có thể được gọi từ dòng lệnh. Nó có thể đơn giản như

python -m trace --count -C . somefile.py ...

Ở trên sẽ thực thi somefile.py và tạo danh sách có chú thích của tất cả các mô-đun Python được nhập trong quá trình thực thi vào thư mục hiện tại.

--help

Hiển thị mức sử dụng và thoát.

--version

Hiển thị phiên bản của mô-đun và thoát.

Added in version 3.8: Đã thêm tùy chọn --module cho phép chạy mô-đun thực thi.

Tùy chọn chính

Ít nhất một trong các tùy chọn sau phải được chỉ định khi gọi trace. Tùy chọn --listfuncs loại trừ lẫn nhau với các tùy chọn --trace--count. Khi --listfuncs được cung cấp, cả --count--trace đều không được chấp nhận và ngược lại.

-c, --count

Tạo một tập hợp các tệp liệt kê có chú thích sau khi hoàn thành chương trình cho biết số lần mỗi câu lệnh được thực thi. Xem thêm --coverdir, --file--no-report bên dưới.

-t, --trace

Hiển thị các dòng khi chúng được thực thi.

-l, --listfuncs

Hiển thị các chức năng được thực hiện bằng cách chạy chương trình.

-r, --report

Tạo danh sách chú thích từ lần chạy chương trình trước đó sử dụng tùy chọn --count--file. Điều này không thực thi bất kỳ mã nào.

-T, --trackcalls

Hiển thị các mối quan hệ gọi điện được hiển thị bằng cách chạy chương trình.

sửa đổi

-f, --file=<file>

Tên của một tập tin để tích lũy số lượng qua nhiều lần chạy theo dõi. Nên sử dụng với tùy chọn --count.

-C, --coverdir=<dir>

Thư mục chứa các tập tin báo cáo. Báo cáo bảo hiểm cho package.module được ghi vào tệp dir/package/module.cover.

-m, --missing

Khi tạo danh sách có chú thích, hãy đánh dấu các dòng không được thực thi bằng >>>>>>.

-s, --summary

Khi sử dụng --count hoặc --report, hãy viết một bản tóm tắt ngắn gọn vào stdout cho mỗi tệp được xử lý.

-R, --no-report

Không tạo danh sách có chú thích. Điều này rất hữu ích nếu bạn dự định thực hiện một số lần chạy với --count và sau đó tạo ra một tập hợp các danh sách có chú thích ở cuối.

-g, --timing

Tiền tố mỗi dòng có thời gian kể từ khi chương trình bắt đầu. Chỉ được sử dụng trong khi truy tìm.

Bộ lọc

Các tùy chọn này có thể được lặp lại nhiều lần.

--ignore-module=<mod>

Bỏ qua từng tên mô-đun đã cho và các mô-đun con của nó (nếu đó là một gói). Đối số có thể là danh sách các tên được phân tách bằng dấu phẩy.

--ignore-dir=<dir>

Bỏ qua tất cả các mô-đun và gói trong thư mục được đặt tên và thư mục con. Đối số có thể là danh sách các thư mục được phân tách bằng os.pathsep.

Giao diện lập trình

class trace.Trace(count=1, trace=1, countfuncs=0, countcallers=0, ignoremods=(), ignoredirs=(), infile=None, outfile=None, timing=False)

Tạo một đối tượng để theo dõi việc thực thi một câu lệnh hoặc biểu thức. Tất cả các tham số là tùy chọn. count cho phép đếm số dòng. trace cho phép theo dõi thực thi dòng. countfuncs cho phép liệt kê các hàm được gọi trong quá trình chạy. countcallers cho phép theo dõi mối quan hệ cuộc gọi. ignoremods là danh sách các mô-đun hoặc gói cần bỏ qua. ignoredirs là danh sách các thư mục có mô-đun hoặc gói nên được bỏ qua. infile là tên của tệp để đọc thông tin đếm được lưu trữ. outfile là tên của tệp để ghi thông tin đếm được cập nhật. timing cho phép dấu thời gian liên quan đến thời điểm bắt đầu hiển thị quá trình theo dõi.

run(cmd)

Thực thi lệnh và thu thập số liệu thống kê từ quá trình thực thi với các tham số theo dõi hiện tại. cmd phải là một đối tượng chuỗi hoặc mã, phù hợp để truyền vào exec().

runctx(cmd, globals=None, locals=None)

Thực thi lệnh và thu thập số liệu thống kê từ quá trình thực thi với các tham số theo dõi hiện tại, trong môi trường cục bộ và toàn cầu đã xác định. Nếu không được xác định, globalslocals mặc định là từ điển trống.

runfunc(func, /, *args, **kwds)

Gọi func với các đối số đã cho dưới sự kiểm soát của đối tượng Trace với các tham số theo dõi hiện tại.

results()

Trả về một đối tượng CoverageResults chứa kết quả tích lũy của tất cả các lệnh gọi trước đó tới run, runctxrunfunc cho phiên bản Trace đã cho. Không thiết lập lại kết quả theo dõi tích lũy.

class trace.CoverageResults

Một vùng chứa kết quả phủ sóng, được tạo bởi Trace.results(). Không nên được tạo trực tiếp bởi người dùng.

update(other)

Hợp nhất dữ liệu từ một đối tượng CoverageResults khác.

write_results(show_missing=True, summary=False, coverdir=None, *, ignore_missing_files=False)

Viết kết quả bảo hiểm. Đặt show_missing để hiển thị các dòng không có lượt truy cập. Đặt summary để đưa vào đầu ra bản tóm tắt phạm vi bảo hiểm cho mỗi mô-đun. coverdir chỉ định thư mục mà các tệp kết quả bảo hiểm sẽ được xuất ra. Nếu None, kết quả của mỗi tệp nguồn sẽ được đặt trong thư mục của nó.

Nếu ignore_missing_filesTrue, số lượng phạm vi phủ sóng cho các tệp không còn tồn tại sẽ bị bỏ qua một cách âm thầm. Nếu không, một tệp bị thiếu sẽ tạo ra FileNotFoundError.

Thay đổi trong phiên bản 3.13: Đã thêm tham số ignore_missing_files.

Một ví dụ đơn giản thể hiện việc sử dụng giao diện lập trình:

hệ thống nhập khẩu
dấu vết nhập khẩu

# create một đối tượng Trace, cho nó biết những gì cần bỏ qua và có nên
# do truy tìm hoặc đếm dòng hoặc cả hai.
tracer = dấu vết.Trace(
    bỏ qua=[sys.prefix, sys.exec_prefix],
    dấu vết=0,
    đếm=1)

# run lệnh mới sử dụng công cụ theo dõi đã cho
tracer.run('main()')

# make một báo cáo, đặt đầu ra vào thư mục hiện tại
r = tracer.results()
r.write_results(show_missing=True, coverdir=".")