Tài liệu
/

Khắc phục sự cố

/

Chẩn đoán lỗi khi chạy của VM

Chẩn đoán lỗi khi chạy của VM

Hãy thực hiện lần lượt các bước sau theo thứ tự. Mỗi bước loại trừ một nguyên nhân phổ biến trước khi bạn dành thời gian khoanh vùng đoạn mã bị lỗi.

1. Kiểm thử và CI

Trước tiên hãy loại trừ các cơ chế phòng thủ lúc chạy (VM Self Defending, VM Debug Protection, VM Domain Lock): tái hiện lỗi bằng một bản dựng kiểm thử dùng các giá trị ghi đè từ Kiểm thử và CI. Nếu bản dựng kiểm thử hoạt động, thì các cơ chế phòng thủ đang phản ứng với công cụ hoặc môi trường của bạn chứ không phải làm hỏng mã của bạn.

2. Tương thích môi trường chạy

Hãy kiểm tra rằng target, quy trình build và mọi khai báo môi trường khớp với nơi mã thực sự chạy.

Bảo vệ VM áp dụng cho các hàm đủ điều kiện. Ở chế độ root, vmWrapTopLevelInitializers còn có thể bọc các biểu thức khởi tạo đủ điều kiện để ảo hóa; các preset VM hiện tại đều bật tùy chọn này. Hãy xem lại các cảnh báo về phạm vi bao phủ như VMNoFunctionsToVirtualize, và dùng chế độ comment để chọn tường minh các hàm nhạy cảm.

Thu gọn trường hợp lỗi về hàm và vị trí gọi nhỏ nhất mà vẫn tái hiện được lỗi. Dùng chế độ comment để thu hẹp những hàm được ảo hóa.

Nếu bạn dùng vmBytecodeArrayEncoding cùng với vmBytecodeArrayEncodingKeyGetter, getter phải trả về đúng chính xác khóa đã dùng lúc build, và khóa đó phải được đặt sẵn khi mã đã làm rối chạy; nếu không, bytecode sẽ không thể giải mã.

Tương thích môi trường chạy · Khóa Bytecode Array Encoding

3. Gửi báo cáo lỗi

Gửi email tới support@obfuscator.io. Bạn cung cấp càng nhiều thông tin dưới đây, chúng tôi càng sửa lỗi nhanh hơn:

  • Toàn bộ stack trace của lỗi, đúng y như hiển thị trong console, không phải diễn giải lại.
  • Các tùy chọn obfuscator dưới dạng JSON. Sao chép toàn bộ đối tượng tùy chọn bạn đã dùng (hoặc tên preset cùng mọi giá trị ghi đè). Các tương tác tinh vi giữa các tùy chọn rất phổ biến, nên chúng tôi cần đúng bộ tùy chọn đó.
  • Cảnh báo khi build, nếu có: type, message và functionName của từng cảnh báo.
  • Phiên bản obfuscator - hiển thị trong bộ chọn phiên bản của bảng điều khiển bên dưới trình soạn thảo. Với bản dựng qua API và gói npm, đó là trường version trong thông điệp result hoặc chunk_end của API.
  • Môi trường - trình duyệt và phiên bản, phiên bản Node.js, hệ điều hành, mọi điều bất thường về môi trường chạy (tiện ích mở rộng, polyfill, các đối tượng dựng sẵn tùy chỉnh).
  • Bản tái hiện tối giản - lý tưởng nhất là một hàm duy nhất từ mục 2, cùng với vị trí gọi cần thiết để kích hoạt lỗi.
  • Mã nguồn gốc (trước khi làm rối), nếu có thể. Đầu ra đã làm rối cũng khó hiểu đối với chúng tôi; không có đầu vào, chúng tôi sẽ phải dịch ngược chính bytecode của mình.

Nếu mã nguồn là độc quyền, hãy nêu rõ trong email; chúng tôi có thể ký NDA trước khi bạn chia sẻ. Chúng tôi không thể chẩn đoán lỗi VM một cách đáng tin cậy nếu không thấy mẫu đầu vào đã tạo ra bytecode hỏng, nên việc trao đổi thêm này là xứng đáng.