Firebugには、特定の関数名への呼び出しを記録する機能があります。私はときどきレンダリングからページを停止するバグを探していますが、エラーや警告は発生しません。バグは約半分にしか現れません。では、プログラム全体のすべての関数呼び出しのリスト、またはプログラム全体の実行のための何らかの種類のスタックトレースを取得するにはどうすればよいですか?firebugを使用するプログラム全体のログ/スタックトレース
答えて
Firefox providesconsole.trace()
これは、コールスタックを印刷するのに非常に便利です。それはChromeとIE 11でも利用可能です。私は放火犯せずにこれを達成
function print_call_stack() {
var stack = new Error().stack;
console.log("PRINTING CALL STACK");
console.log(stack);
}
一度に1行または1つの機能を実行して、正常に動作しなくなる場所を確認してください。あるいは、合理的な推測を行い、コードを通してロギングステートメントを散らすこともできます。私は次の操作を行い、スタックトレースが必要な場合
これです。間違いなくあなたの関数に 'console.log( 'something')'ステートメントのロードを追加して呼び出されているかどうかを確認してください。 – Gareth
プログラムは膨大なので、関数ログを比較する方法を探していますプログラムが正常に実行されたときと実行されなかったときの両方を示します。 – amccormack
これは役に立ちそうです。私は大きなコードベースの所有権を握るために足を踏み入れており、すべての関数呼び出しの実行トレースを生成できるものは、コードの流れ/形の感覚を得てデッドコードを検出するのに役立ちます。 –
は、多分あなたはそれからいくつかのインスピレーションを描くことができます:
function logStackTrace(levels) {
var callstack = [];
var isCallstackPopulated = false;
try {
i.dont.exist += 0; //doesn't exist- that's the point
} catch (e) {
if (e.stack) { //Firefox/chrome
var lines = e.stack.split('\n');
for (var i = 0, len = lines.length; i < len; i++) {
callstack.push(lines[i]);
}
//Remove call to logStackTrace()
callstack.shift();
isCallstackPopulated = true;
}
else if (window.opera && e.message) { //Opera
var lines = e.message.split('\n');
for (var i = 0, len = lines.length; i < len; i++) {
if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) {
var entry = lines[i];
//Append next line also since it has the file info
if (lines[i + 1]) {
entry += " at " + lines[i + 1];
i++;
}
callstack.push(entry);
}
}
//Remove call to logStackTrace()
callstack.shift();
isCallstackPopulated = true;
}
}
if (!isCallstackPopulated) { //IE and Safari
var currentFunction = arguments.callee.caller;
while (currentFunction) {
var fn = currentFunction.toString();
var fname = fn.substring(fn.indexOf("function") + 8, fn.indexOf("(")) || "anonymous";
callstack.push(fname);
currentFunction = currentFunction.caller;
}
}
if (levels) {
console.log(callstack.slice(0, levels).join('\n'));
}
else {
console.log(callstack.join('\n'));
}
};
司会者注:この答えのコードも this post from Eric Wenderlin's blogに表示されているようです。この回答の著者は、ここにリンクされたブログ記事の前に書かれた自分のコードとしてそれを主張しています。誠実な目的のために、私はポストとこのノートへのリンクを追加しました。
これを行うFirebugでconsole.trace()を呼び出すことができます。 – amccormack
これは素晴らしいです。 Firebugは、ファイルのサイズを小さくしても問題はありません。このスクリプトはそれを行います。 – pstadler
FWIW @ andrew-barber、彼自身が主張した答えの著者。ちょっと気にしなかった。あなたの編集はコメントでなければなりません。 – Ascherer
:
また、このような何かを試してみてください。 ChromeとFirefoxの両方でテスト:
console.error("I'm debugging this code.");
プログラムはコンソールに、あなたはコールスタックを展開することに小さな矢印をクリックすることができることを印刷したら。
- 1. プログラム全体のAST
- 2. プログラム全体を出力するPythonマルチプロセッシング
- 3. プログラム上の制約 - レイアウトアンカーを使用してスーパービュー全体をカバーする
- 4. エイリアスディレクティブを使用するプロジェクト全体#
- 5. アプリケーション全体を使用するベストプラクティスTraceSource
- 6. Firebug "XMLはプログラム全体になり得ません"というエラーメッセージの意味は何ですか?
- 7. Firebugプログラムによるブレークポイント?
- 8. JavaプログラムまたはJMXを使用してリモートコンピュータのシステム全体のCPU使用率を取得する方法
- 9. Android GridLayout-画面全体をプログラムでカバー
- 10. ノードjs - プログラムの全体的な構造
- 11. アプリ全体にDisqusのガーゴイルを使用
- 12. プログラム全体をどのようにループするのですか?
- 13. Cプログラムのセグメンテーションフォルト(構造体を使用)
- 14. アプリ全体で使用されるカスタムフォント
- 15. ウェブサイト全体でのセッションの使用
- 16. プログラム全体の変数を変更する方法
- 17. TSQL共用体全体エラー
- 18. CakePHP:配列全体にインフレクタークラスを使用
- 19. 反応ネイティブアプリ全体でグローバルアラートを使用
- 20. コード全体でintを使用
- 21. テキストファイル全体を検索するプログラムが必要です
- 22. iOSでプログラム全体で繰り返すサウンドを再生する
- 23. ページ全体の内容を置換する(DOCTYPEを使用)
- 24. PTY.spawnを使用してスクリプトプロセスのIO全体を記録する
- 25. SVNリポジトリ全体のコードの使用状況を追跡する
- 26. プログラム全体をスキル全体をDialogFlowにアップロードする方法はありますか?
- 27. Whileループを使用するとスクリプト全体がフリーズする
- 28. デバッガを介して監視するプログラム全体
- 29. Pythonスクリプト内からJavascriptプログラム全体を実行するには
- 30. スペックスイート全体をプログラムで高速に処理する方法
+1 console.trace() – chim
これは気楽です:) – iamawebgeek
スタックの長さを増やす方法はありますか?それは非常に役に立ちます。 –