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. アプリケーション全体を使用するベストプラクティスTraceSource
- 2. エイリアスディレクティブを使用するプロジェクト全体#
- 3. Firebug "XMLはプログラム全体になり得ません"というエラーメッセージの意味は何ですか?
- 4. JavaプログラムまたはJMXを使用してリモートコンピュータのシステム全体のCPU使用率を取得する方法
- 5. アプリ全体にDisqusのガーゴイルを使用
- 6. Firebugプログラムによるブレークポイント?
- 7. アプリ全体で使用されるカスタムフォント
- 8. ウェブサイト全体でのセッションの使用
- 9. CakePHP:配列全体にインフレクタークラスを使用
- 10. SVNリポジトリ全体のコードの使用状況を追跡する
- 11. iOSでプログラム全体で繰り返すサウンドを再生する
- 12. デバッガを介して監視するプログラム全体
- 13. NUnitとReSharperを使用して単体テストプロジェクト全体を無視する方法
- 14. プログラム全体を遅延させるメソッドの時間遅延
- 15. アプリケーション全体のテーマをプログラム的に切り替えるには?
- 16. django adminを使用してWebアプリケーション全体を作成する
- 17. ANTを使用してXMLタグ全体を置換する
- 18. WSDLプロキシクラスを使用してXMLパケット全体を表示する
- 19. エンタープライズキャッシングブロックを使用して一度にキャッシュ全体をフラッシュする
- 20. 行全体をハイライト表示する方法(HorizontalScrollViewを使用)
- 21. デザインパターンを使用してシステム全体を記述する
- 22. Unityを使用してアセンブリ全体をインターセプトする方法
- 23. クラス全体で変数を使用する
- 24. Windows Formsアプリケーション全体でシリアルポートを使用する方法は?
- 25. サイト全体でグローバルナビゲーションを使用する方法
- 26. ページ全体でJS変数(HTMLフォームから)を使用する
- 27. サーバー/ドメイン全体でhttpsを強制的に使用する
- 28. 私は、NetBeansを使用しています全体のJTableコンポーネント
- 29. boost python sleep wrapperがpythonプログラム全体をスリープさせます
- 30. xcodeプロジェクト全体でクラス名全体をリファクタリングする
+1 console.trace() – chim
これは気楽です:) – iamawebgeek
スタックの長さを増やす方法はありますか?それは非常に役に立ちます。 –