Khi tôi gặp lỗi trong ExtendScript, tôi muốn có thể ghi nhật ký ngăn xếp của nó. Dường như các lỗi không chứa dấu vết ngăn xếp trong ExtendScript, vì vậy tôi đang chơi xung quanh với ý tưởng thêm dấu vết ngăn xếp vào lỗi.Bắt dấu vết ngăn xếp của một lỗi trong ExtendScript
Cách duy nhất tôi biết để nhận dấu vết ngăn xếp là $.stack
. Trường $.stack
chứa dấu vết ngăn xếp hiện tại tại thời điểm bạn truy cập trường.
Nỗ lực đầu tiên của tôi là tạo đối tượng lỗi của riêng tôi bao gồm ngăn xếp. Đối tượng Error
rất đặc biệt ở chỗ nó có thể nhận được dòng và tên tệp của mã đã tạo ra nó. Ví dụ,
try {
throw new Error("Houston, we have a problem.");
}
catch (e) {
$.writeln("Line: " + e.line);
$.writeln("File: " + e.fileName);
$.writeln("Message: " + e.message);
}
Sẽ in:
Line: 2
File: ~/Desktop/Source1.jsx
Message: Houston, we have a problem.
Tôi không nghĩ rằng nó có thể tạo ra đối tượng của riêng bạn với khả năng này. Gần nhất tôi có thể nhận được là thế này:
function MyError(msg, file, line) {
this.message = msg;
this.fileName = file;
this.line = line;
this.stack = $.stack;
}
try {
throw new MyError("Houston, we have a problem.", $.fileName, $.line);
}
catch (e) {
$.writeln("Line: " + e.line);
$.writeln("File: " + e.fileName);
$.writeln("Message: " + e.message);
$.writeln("Stack: " + e.stack);
}
nào in:
Line: 9
File: ~/Desktop/Source2.jsx
Message: Houston, we have a problem.
Stack: [Source3.jsx]
MyError("Houston, we have a p"...,"~/Desktop/Source2.js"...,9)
Ở đây chúng ta có thể thấy rằng tôi là tạo ra đối tượng lỗi của riêng tôi và rõ ràng đi qua nó dòng và tên file (kể từ MyError không thể hình dung ra điều đó). Tôi cũng đã bao gồm ngăn xếp hiện tại khi lỗi được tạo.
Điều này hoạt động tốt khi tôi gọi đối tượng lỗi của riêng mình, nhưng nó không hoạt động khi mã khác gọi đối tượng Lỗi thông thường hoặc khi lỗi được tạo tự động (ví dụ: truy cập bất hợp pháp). Tôi muốn có thể nhận được dấu vết ngăn xếp của bất kỳ lỗi nào, bất kể nó được tạo ra như thế nào.
Các cách tiếp cận khác có thể là sửa đổi hàm xây dựng Error
, sửa đổi nguyên mẫu Error
hoặc thay thế hoàn toàn đối tượng Error
. Tôi đã không thể có được bất kỳ cách tiếp cận nào để làm việc.
Một ý tưởng khác là đặt khối catch vào mọi phương thức mã của tôi và thêm ngăn xếp hiện tại vào lỗi nếu nó chưa có. Tôi muốn tránh tùy chọn này nếu có thể.
Tôi hết ý tưởng. Có cách nào để có được dấu vết ngăn xếp của các lỗi?
Tôi thực sự quan tâm nếu bạn làm việc gì đó. Vấn đề lớn nhất của tôi là ngay khi tôi biên dịch sang định dạng jsxbin, tôi không nhận được gì hữu ích từ các lỗi. Tôi đã đi con đường của một số lượng đáng kinh ngạc của khai thác gỗ xảy ra vì vậy tôi có thể gỡ lỗi từ đó. –
Personnaly Tôi woudl'nt sử dụng $ .write hoặc $ .writeln hướng dẫn. Trước hết, họ sẽ mang lại Advance Toolkit ExtendScript nếu không mở yer. Điều đó có thể gây nhầm lẫn cho người dùng cuối nếu họ không cảnh báo. Ngoài ra nó có thể được thực sự thực sự chậm đặc biệt là các vòng bên trong. Tôi thích viết tệp nhật ký vào đĩa. Tôi có công thức riêng của tôi nhưng bạn có thể tận dụng lợi thế của lib này: http: //creative-scripts.com/logging-with-a-smile/ – Loic