Hướng dẫn how do i map bytecodes back to line numbers in python? - làm cách nào để ánh xạ các mã byte trở lại số dòng trong python?
trừu tượngPython nên đảm bảo rằng khi truy tìm được bật, các sự kiện theo dõi dòng trực tuyến được tạo ra cho tất cả các dòng mã được thực thi và chỉ cho các dòng mã được thực thi. Show
Thuộc tính "line" 1 "line" 2 "line" 44 của các đối tượng khung phải luôn luôn chứa số dòng dự kiến. Trong quá trình thực hiện khung, số dòng dự kiến là số dòng mã nguồn hiện đang được thực thi. Sau khi một khung hình hoàn thành, bằng cách trả lại hoặc bằng cách tăng một ngoại lệ, số dòng dự kiến là số dòng của dòng nguồn cuối cùng được thực thi. Một tác dụng phụ của việc đảm bảo số dòng chính xác, là một số byte sẽ cần được đánh dấu là nhân tạo và không có số dòng có ý nghĩa. Để hỗ trợ các công cụ, một thuộc tính "line" 1 "line" 2 "line" 45 mới sẽ được thêm vào mô tả ánh xạ từ mã byte đến nguồn. Động lựcCơ sở lý luận Sự chỉ rõ Truy tìm Cơ sở lý luậnSự chỉ rõ Truy tìm Những gì được coi là mã cho mục đích truy tìm Ví dụ trình tự sự kiện Sự chỉ rõTruy tìm Truy tìmNhững gì được coi là mã cho mục đích truy tìm Ví dụ trình tự sự kiện Thuộc tính F_Lineno
Thuộc tính co_linetable Những gì được coi là mã cho mục đích truy tìmVí dụ trình tự sự kiện Thuộc tính F_Lineno Phương thức CO_LINES () mới của các đối tượng mã Phạm vi chiều rộng bằng không
Nhiều câu lệnh "line" 1 "line" 2 "line" 41. Ví dụ trình tự sự kiệnThuộc tính F_Lineno Phương thức CO_LINES () mới của các đối tượng mã Phạm vi chiều rộng bằng không Phương thức CO_LINES () mới của các đối tượng mã 1. try: 2. pass 3. finally: 4. pass Phạm vi chiều rộng bằng không "line" 1 "line" 2 "line" 4 Phương thức CO_LINES () mới của các đối tượng mã 1. for ( 2. x) in [1]: 3. pass 4. return Tạo các sự kiện sau: "line" 2 # evaluate [1] "line" 1 # for "line" 2 # store to x "line" 3 # pass "line" 1 # for "line" 4 # return "return" 1 Thuộc tính F_Lineno
Phương thức CO_LINES () mới của các đối tượng mãPhương thức 1. for ( 2. x) in [1]: 3. pass 4. return0 sẽ trả về một trình lặp lại mang lại các bộ dữ liệu của các giá trị, mỗi phần biểu thị số dòng của một phạm vi byte. Mỗi tuple sẽ bao gồm ba giá trị:
Trình tự được tạo sẽ có các thuộc tính sau:
Phạm vi chiều rộng bằng khôngPhạm vi chiều rộng bằng không, đó là phạm vi được phép "line" 1 "line" 2 "line" 4 "return" 40. Phạm vi chiều rộng bằng không được sử dụng cho các dòng có trong mã nguồn, nhưng đã được loại bỏ bởi trình biên dịch byte. Thuộc tính co_linetableThuộc tính CO_LINETABLE sẽ giữ thông tin số dòng. Định dạng mờ đục, không xác định và có thể được thay đổi mà không cần thông báo trước. Thuộc tính chỉ công khai để hỗ trợ tạo các đối tượng mã mới. Thuộc tính Co_lnotabTrong lịch sử, thuộc tính "line" 1 "line" 2 "line" 48 đã giữ một ánh xạ từ phần bù mã byte đến số dòng, nhưng không hỗ trợ bytecodes mà không có số dòng. Đối với khả năng tương thích ngược, đối tượng byte "line" 1 "line" 2 "line" 48 sẽ được tạo một cách uể oải khi cần thiết. Đối với các phạm vi byte mà không có số dòng, số dòng của phạm vi mã byte trước đó sẽ được sử dụng. Các công cụ phân tích bảng "line" 1 "line" 2 "line" 48 nên chuyển sang sử dụng phương thức 1. for ( 2. x) in [1]: 3. pass 4. return0 mới ngay khi thực tế. Khả năng tương thích ngượcThuộc tính "line" 1 "line" 2 "line" 48 sẽ được dùng hết trong 3.10 và bị loại bỏ trong 3.12. Bất kỳ công cụ nào phân tích thuộc tính "line" 1 "line" 2 "line" 48 của các đối tượng mã sẽ cần phải chuyển sang sử dụng 1. for ( 2. x) in [1]: 3. pass 4. return0 trước khi 3.12 được phát hành. Các công cụ sử dụng "line" 1 "line" 2 "line" 46 sẽ không bị ảnh hưởng, ngoại trừ trong trường hợp các sự kiện của dòng dòng họ nhận được chính xác hơn. Ví dụ về mã mà chuỗi các sự kiện theo dõi sẽ thay đổiTrong các ví dụ sau, các sự kiện được liệt kê là các cặp tên, "line" 1 "line" 2 "line" 44. Tuyên bố |