console.trace()
mengeluarkan hasilnya di konsol.
Saya ingin mendapatkan hasil sebagai string dan menyimpannya ke file.
Saya tidak menentukan nama untuk fungsi dan saya juga tidak bisa mendapatkan namanya callee.caller.name
.
98
Jawaban:
Saya tidak yakin tentang firefox, tetapi di v8 / chrome Anda dapat menggunakan metode pada konstruktor Kesalahan yang disebut
captureStackTrace
. ( Info selengkapnya di sini )Jadi cara hacky untuk mendapatkannya adalah:
Biasanya,
getStackTrace
akan ada di tumpukan saat ditangkap. Argumen kedua di sana tidakgetStackTrace
disertakan dalam pelacakan tumpukan.sumber
Error().stack
. Meskipun nama Objek dan fungsi hilang di firefox dan nama objek hilang di chrome (sama sepertiError.captureStackTrace
),Error().stack
berfungsi di kedua browser dan memberi saya informasi yang cukup untuk men-debug.Error.stack adalah yang Anda butuhkan. Ini berfungsi di Chrome dan Firefox. Sebagai contoh
akan memberikan di Chrome:
dan di Firefox:
sumber
(new Error).stack
Ini akan memberikan jejak tumpukan (sebagai array string) untuk Chrome modern, Firefox, Opera dan IE10 +
Pemakaian:
Ini mengecualikan dari tumpukan panggilannya sendiri serta judul "Kesalahan" yang digunakan oleh Chrome dan Firefox (tetapi bukan IE).
Seharusnya tidak macet di browser lama tetapi hanya mengembalikan array kosong. Jika Anda membutuhkan solusi yang lebih universal, lihat stacktrace.js . Daftar browser yang didukungnya benar-benar mengesankan tetapi menurut saya ini sangat besar untuk tugas kecil yang dimaksudkan untuk: 37Kb teks yang diperkecil termasuk semua dependensi.
sumber
Ada pustaka bernama stacktrace.js yang memberi Anda pelacakan tumpukan lintas browser. Anda dapat menggunakannya hanya dengan memasukkan skrip dan memanggil kapan saja:
sumber
Ini hanya peningkatan kecil pada kode Konstantin yang sangat baik. Ini memotong sedikit biaya melempar-menangkap dan hanya membuat contoh tumpukan Kesalahan:
Saya biasanya menginginkan tingkat pelacakan tumpukan tertentu (untuk logger khusus saya) jadi ini juga dapat dilakukan saat memanggil:
sumber
kamu hanya butuh
var stack = new Error().stack
. ini adalah versi sederhana dari jawaban @sgouros.Mungkin tidak akan berfungsi di setiap browser (berfungsi di Chrome).
sumber