問題タブ [backtrace]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - アセンブリ内のスタック/ベースポインタ
私はこのトピックがここやインターネット上の他の場所で取り上げられていることを知っていますが、うまくいけば、私が集会に頭を悩ませようとしているので、質問は単純なものです...
したがって、正しく理解していれば、ebp(ベースポインター)はスタックの一番上を指し、esp(スタックポインター)は一番下を指します-スタックが下に成長するためです。したがって、espは「現在の場所」を指します。したがって、関数呼び出しでは、スタックにebpを保存したら、関数用の新しいスタックフレームを挿入します。したがって、下の画像の場合、N-3から開始した場合は、関数呼び出しを使用してN-2に移動します。しかし、あなたがN-2にいるとき、あなたのebp==25とesp==24ですか(少なくとも最初は、データがスタックに配置される前に)?
これは正しいですか、それとも私はここで接線を外れていますか?
ありがとう!
(出典:wikimedia.org)
google-chrome - 例外時にGoogleChromeにバックトレースを表示させるにはどうすればよいですか?
(プラグインまたはおそらくいくつかの構成オプションを使用して)javascriptエラーコンソールにエラーバックトレースを表示させることは可能ですか?
exception - キャッチされていない例外でRuby rakeに完全なバックトレースを表示させるにはどうすればよいですか
ご存じかもしれませんが、rake はキャッチされない例外の完全なバックトレースを飲み込みます。完全なバックトレースが必要な場合は、 --trace オプションを追加する必要があります。一部のタスクは実行に長時間 (最大 6 時間) かかり、クラッシュしたときにデバッグ情報がないため、これは非常に面倒です。--trace を使用して再度実行する必要があります。その上、システムがエラー発生時と同じ状態にない可能性があるため、その後表示されない場合があります。タスクには常に --trace を追加する必要があります。タスクが実行されたときに見たくないこのディスプレイのようなもの。
このデフォルトの動作を変更する方法はありますか? (これはまったく役に立たないと思います)
javascript - Uncaught TypeError:未定義のプロパティ'length'を読み取ることができません
length
多くの要素のプロパティにアクセスするプラグインがあります。ただし、javascriptコンソールはjquery.min.jsの12行目を指しています。
プラグインで問題のある行を見つけるためにバックトレースするにはどうすればよいですか?
ruby - Ruby でデッドロックを追跡する方法
BrBを使用して、フォークした Ruby 1.9 のさまざまなワーカー プロセスのデータソースを共有しますProcess#fork
。
ワーカーは次のようにフォークされます。
これはほぼ完全に機能しますが、約 10 分間実行した後、次のエラーが発生します。
このエラーは、デッドロックが実際に発生している場所についてはあまり教えてくれませんjoin
。EventMachine スレッドのことを示しているだけです。
プログラムが停止した時点を追跡するにはどうすればよいですか?
iphone - iPhoneシミュレーター用にビルドすると、XCodeコンソールにgdbがなくなります
通常、アプリケーションのデバッグにはgdbバックトレースを使用しますが、最近、iPhoneシミュレーターでテストするときにデバッグできなくなりました。青いgdbワードがコンソールに表示されなくなり、「bt」または「backtrace」と入力しても何も起こりません。ただし、デバイス上で適切にビルドおよびデバッグすることはできます。
私のXCodeバージョンは3.2.3です。gdb(より重要なのはバックトレース)を手動でアクティブ化する方法はありますか?
c - トレースとバックトレースを C プログラムに組み込むためのシンプルで統一された移植可能な方法
GNU libc のバックトレースとインサーキット エミュレーター/デバッガーは、コードを新しいプラットフォームに移植する場合、特にターゲットがZ80などのマイクロCコンパイラーである場合、常に利用できるとは限りません。(通常、プログラムのバグはどこかで「ハングアップ」するか、ガジェットをクラッシュさせます。)
printf を手動で挿入する古典的な「オオカミフェンシング」方法に代わるものはありますか? C プログラムへのトレースとバックトレースを含むプログラムの開発中に、コーダーが実行できる (C 拡張機能を使用しない) シンプルで移植可能なものはありますか?
ところで:関連するstackoverflowに関する他のいくつかの質問がありますが、これらは両方ともGNU GLIBCのバックトレースを使用し、バックトレースは多くの場合コンパイラ/実装固有です:
php - 各PHPバックトレースレベルでスコープ内の変数を取得しますか?
バックトレースで各スタックフレームに設定された変数を表示する方法はありますか?debug_backtrace(true)
オブジェクトを取得する、get_object_vars
各オブジェクトで$ this vars、args
各バックトレースフレームのキーを取得する、およびget_defined_vars
グローバルを取得するという組み合わせでかなり近づくことができますが、関数内に設定された一時変数は方法を見つけることができません取得します。
状況の例を次に示します。
バックトレースのキー、からのオブジェクト変数、およびからのグローバルを取得できます。との価値も知りたいです。$foo
$bar
args
$bar
get_object_vars
get_defined_vars
$temp2
$temp
ruby - ruby にメソッドのパラメータ値をバックトレースで表示させることはできますか?
MRI 1.9 の使用
バックトレースが出力される原因となる例外が発生した場合、バックトレースがメソッド名だけでなくレシーバーとメソッドパラメーターの値を示していれば、デバッグが非常に簡単になることがよくあります。これを行う方法はありますか?
nil を想定していなかったライブラリ コードの奥深くに渡した場合や、2 つの文字列に互換性のないエンコーディングがあり、いくつかのルーチンがそれらを連結しようとしている場合などの状況を考えてみてください。
c++ - コールスタックの一番下へのポインターを取得し、Windows でアドレス (dladdr など) でシンボルを解決しますか?
たとえば、この情報を例外に追加するために、Windows で backtrace ユーティリティのアナログを実装したいと考えています。
リターン アドレスを取得し、それをシンボル名に変換する必要があります。
私は StackWalk64 とStackWalker プロジェクトを認識していますが、残念ながらいくつかの重要な欠点があります。
- それは非常に遅いことが知られています (StackWalk64) トレースを収集するために多くの時間を無駄にしたくありません。基本的にはリンクされたリストを歩くのと同じくらい速く実行できます。
- 関数 StackWalk64 は、スレッドセーフではないことが知られています。
x86 および可能な x86_64 アーキテクチャのみをサポートしたい
私が持っている基本的な考え方は次のとおりです。
- esp/ebp レジスタを使用して、スタックの一番下に到達するまで GCC の
__builtin_return_address(x)
/と同様にスタック上で実行し__builtin_frame_address(x)
ます (これは glibc が行うことです)。 - アドレスをシンボルに変換する
- それらを分解します。
問題/質問:
- スタックの to に到達したことをどのように知ることができますか? たとえば、glibc の実装には次の機能が
__libc_stack_end
あるため、どこで停止するかを簡単に見つけることができます。Windowsの下でそのようなことの類似物はありますか? スタック ボトム アドレスを取得するにはどうすればよいですか? - dladdr 機能の類似物は何ですか。これで、ほとんどのシンボル名を保持する ELF プラットフォームとは異なり、PE 形式は保持しないことがわかりました。したがって、何らかの形でデバッグ情報を読み取る必要があります。何か案は?