Senin bilmediğin bir şey biliyorum: stacktrace.js



  1. Senin bilmediğin bir şey biliyorum: stacktrace.js

stacktrace.js kitaplığı, yığın izleme bilgilerine tarayıcıdan bağımsız erişim sağlar ve küçültülmüş sürümden orijinal koddaki satır ve sütun numaralarını çıkarabilmek için kaynak haritalardan yerelleştirme bilgilerini içerir.


“Senin Bilmediğin Bir Şeyi Biliyorum”


…Golo Roden ve Philip Ackermann’ın ortak serisidir ve bu seride ikisi düzenli olarak JavaScript ve Node.js için modüller sunar.





Ne yazık ki, yığın izleme bilgilerine erişim JavaScript’te standartlaştırılmamıştır, bu nedenle davranış tarayıcıdan tarayıcıya değişir. Mülkiyet hakkında söylenebilse de yığın itibaren hatalar-nesneler karşılık gelen bilgilere erişim sağlar, ancak bunun bile sınırlamaları vardır: örneğin, satır ve sütun numaraları hakkında içerdikleri bilgiler, bir kitaplığın küçültülmüş sürümüyle uğraşırken çok az işe yarar.

Giriş


Stacktrace.js kitaplığı tam olarak burada devreye girer: bir yandan yığın izleme bilgilerine tarayıcıdan bağımsız erişim sağlar ve diğer yandan satır ve sütun numaraları hakkında sonuçlar çıkarmak için kaynak haritalardan yerelleştirme bilgilerini içerir Küçültülmüş sürümden orijinal kod mümkün. Hem tarayıcıda hem de Node.js’de kullanılabilir.

Stacktrace.js dahili olarak birkaç kitaplık kullanır: yığın izleme bilgilerini ayrıştırmak için error-stack-parser, kaynak haritalardan konum bilgilerini çıkarmak için stacktrace-gps, yığın oluşturmak için yığın oluşturucu argümanlar.callee temel alınan nesne modeli için oluşturma ve yığınlama çerçevesi. Tüm kitaplıklar stacktrace.js’den bağımsız olarak da kullanılabilir.

Kurulum ve kullanım


Stacktrace.js’yi Node.js’de kullanmak için önce komutla npm aracılığıyla her zamanki gibi çalıştırılmalıdır. npm stacktrace-js’yi kurun yüklü olmak Daha sonra aşağıdaki gibi entegre edilebilir:

'use strict';
const StackTrace = require('stacktrace-js');


Yöntem hakkında Hatadan() daha sonra başlatılabilir hatalarilgili yığın izleme bilgisini oluşturmak için nesne:

const objectA = {
methodA() {
throw new Error();
}
}
const objectB = {
methodB() {
try {
objectA.methodA();
} catch(error) {
StackTrace
.fromError(error) // Stacktrace auf Basis von Fehlerobjekt
.then(handleStackTrace) // Ausgabe Stacktrace-Informationen
.catch(handleError) // Fehlerbehandlung
}
}
}
objectB.methodB();

Karşılık gelen geri aramada, diğer şeylerin yanı sıra geçerli işlev adını, dosya adını, satır ve sütun numarasını ve yığın izlemesinden orijinal mesajı içeren bir bağımsız “yığın çerçeveleri” dizisine erişebilirsiniz:

const handleStackTrace = function(stackFrames) {
console.log('*************** Start stacktrace ***************');
stackFrames.forEach((stackFrame, index) => {
console.log(index);
console.log('tFunktion: ', stackFrame.functionName);
console.log('tDatei: ', stackFrame.fileName);
console.log('tZeile: ', stackFrame.lineNumber);
console.log('tSpalte: ', stackFrame.columnNumber);
console.log('tOriginal: ', stackFrame.source);
});
console.log('************************************************');
};
const handleError = function(error) {
console.log(error.message);
};

Olmadığınız bir yerde yığın izleme bilgilerine erişmek istiyorsanız hatalar– Nesne mevcut, alternatif yöntem almak() kullanım:

const objectB = {
methodB() {
StackTrace
.get()
.then(callback)
.catch(errorCallback)
}
}
objectB.methodB();

Herhangi bir nedenden dolayı söz kullanmak istemiyorsanız veya her şeyi senkronize yapmak istiyorsanız, aşağıdaki listede gösterilen yöntemi de kullanabilirsiniz. getSync() Geri düşmek için. Ancak, bu yöntem herhangi bir kaynak harita içermez (erişim eşzamansız olacaktır).

const objectB = {
methodB() {
const stackTrace = StackTrace.getSync();
handleStackTrace(stackTrace);
}
}
objectB.methodB();

kullanırken yapay olarak oluştur() yığın izleme bilgilerinin dayandığı argümanlar.callee oluşturulur, böylece somut işlev argümanları dahil edilebilir ve ilgili argümanlarına eklenebilir. yığınÇerçeve– Özellik aracılığıyla nesneler üzgünüm sağlanır (ancak bu katı modda çalışmaz).

...
const handleStackTrace = function(stackFrames) {
...
stackFrames.forEach((stackFrame, index) => {
...
console.log('tArgumente: ', stackFrame.args);
});
...
};
...
const objectB = {
methodB() {
StackTrace
.generateArtificially()
.then(handleStackTrace)
.catch(handleError)
}
}
objectB.methodB();
alternatifler ve sonuç


stacktrace.js kitaplığı, yığın izleme bilgilerine erişimi birleştirir ve hem tarayıcıda hem de Node.js’de kullanılabilir. Yalnızca Node.js veya V8 üzerinde çalışan bir çözüm yeterliyse stack-trace modülünü de kullanabilirsiniz. Ama kesinlikle başka birçok kütüphane var. peki sen? Hangi kütüphaneyi, hangi Node.js modülünü kullanıyorsunuz? Yoksa kendi çözümünüzü de mi yazdınız? Geri bildiriminizi almak için sabırsızlanıyorum.


()



Haberin Sonu
 
Üst