問題タブ [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.
mips - SIGSEGV の mips _Unwind_Backtrace
Mips プラットフォームで、Unwind を機能させようとしています。現在、print_trace を手動で発行すると、スタック トレースは次のように正しく表示されます。
backtrace_helper 0x4b6958
backtrace_helper 0x4b6ab4
backtrace_helper 0x2ac2f628
スタック フレームを 3 つ取得しました。
./v(print_trace+0x38) [0x4b6958]
./v(メイン+0x90) [0x4b6ab4]
/lib/libc.so.0(__uClibc_main+0x24c) [0x2ac2f628]
しかし、SIGSEGV が発生すると、スタック トレースは正しい関数呼び出しシーケンスを示しません。
backtrace_helper 0x4b7a74
backtrace_helper 0x2ab9b84c
スタック フレームを 2 つ取得しました。
./v(getLineIDByPhyIdx+0x3d8) [0x4b7a74]
/lib/libpthread.so.0(__new_sem_post+0x2c8) [0x2ab9b84c]
-g -fexceptions -rdynamic でコンパイルしています。また、gcc C++ アプリがクラッシュしたときにスタックトレースを生成する方法を見てきました。2 番目の回答で間違ったアドレスについて言及されていますが、彼のように設定しても 2 番目のフレームのみが変更され、残りは同じです。コード スニペットは以下のとおりです。
コード:
stack - Solaris でのスタック バックトレースの破損
次の破損したスタック トレースが発生する理由を誰か説明できますか?
コアは、x86 マシン上に構築されたプロセスから発生します。プロセスを実行しているマシンでバックトレースが実行される場合、バックトレースは完全なフレーム情報で完全です。ただし、ビルド マシン (別のマシン) でコアを使用してバックトレースを実行すると、上記のトレースが実行されます。
私が考えた明らかなことの 1 つは、OS のパッチ レベルが異なることでした。1 つは5.10 Generic_138889-03
(実行マシン)、もう1 つは5.10 Generic_138889-02
(ビルド マシン) です。これが理由でしょうか?それとも他に何がありますか?フレーム全体の情報を表示して、コア メモリをより詳細に調べるためにできることはありますか?
任意の考えをいただければ幸いです。
ありがとう。
linux - Linux 64 ビットで backtrace() がクラッシュする原因 (SIGSEGV)
特定の頻度で実行中のすべてのスレッドをバックトレースしたい Linux でアプリケーションを開発しています。そのため、ユーザー定義のシグナルハンドラー SIGUSR1 (すべてのスレッド用) は backtrace() を呼び出します。
backtrace() 呼び出しから発生したシグナル ハンドラーでクラッシュ (SIGSEGV) が発生しています。ほとんどのサイトで指定されているように、関数に正しい引数を渡しました。 http://linux.die.net/man/3/backtrace。
この場合、backtrace() がクラッシュする原因は何ですか?
詳細を追加するには:
クラッシュがバックトレース内にあると結論付けたのは、以下のフレーム 14 です。onMySignal はシグナル ハンドラ SIGUSR1 であり、backtrace を呼び出します。
onMySignal のサンプルコードは (backtrace の Linux ドキュメントからコピー)
これが問題をより明確にすることを願っています..
@janneb より良い同期のために、ミューテックスロックでシグナルハンドラの実装を書きました。
@janneb API backtrace_symbols/backtrace が async_signal_safe かどうかを指定するドキュメントが見つかりませんでした。シグナルハンドラで使用するかどうか。
それでも、Signal ハンドラーから backtrace_symbols を削除し、どこでも使用しないでください。なぜそれがクラッシュしているのか見当がつかない..
編集 23/06/11: 詳細:
realloc の実行中にクラッシュが発生し、アドレスの 1 つが 0x00000000000007e0 のようになりました (無効に見えます)。
linux - 他のスレッドのバックトレースを取得する
Linuxでは、バックトレースを取得するためにbacktrace()ライブラリ呼び出しを使用できますが、それは現在のスレッドのバックトレースのみを返します。TID(またはpthread_t)であり、スリープを保証できると仮定して、他のスレッドのバックトレースを取得する方法はありますか?
libunwind(http://www.nongnu.org/libunwind/)プロジェクトが役立つようです。問題は、CentOSでサポートされていないことです。そのため、私はそれを使用したくないのです。
他のアイデアはありますか?ありがとう。
gcc - GDB: バックトレース内のファイルへの相対パスと絶対パスに関する質問
gdb や gcc について質問があります (Firefox ではありません)。
Firefox をデバッグしているときに、gdb に絶対パスしか表示されません。例:
このようなバックトレースを読むのは不快です。小さなテスト プログラムをコンパイルしてデバッグしようとすると、次のようなバックトレースが表示されます (ファイルへの相対パスを使用):
Firefox のデバッグ時にバックトレースで相対パスのみを表示するにはどうすればよいですか?
PS gcc 4.4.1; gdb 7.0。
objective-c - Mac で GDB バックトレースに関数名が表示されない
私はこのコードで gdb でいくつかのことをテストしていました (これは間違ったコードです。テスト目的でのみ使用します):
それから私はそれをコンパイルします: gcc -Wall -g -framework Foundation testGdb.m -o testGdb
、そして私はそれを実行します:
(gdb)
奇妙なことに、(#1) には名前がなく、正しい出力では通常 NSLog (クラッシュの原因) と main が出力されます。
この奇妙な動作を理解していただきありがとうございます。
java - Java の Arraylist 内から親 Arraylist を参照する
Javaで配列リストをトレースできるかどうか疑問に思っていましたか? つまり、次のようなものがある場合:
「aMainSection」と「aChildSection」はどちらもセクション型の配列リストですが、「aChildSection」からさかのぼって親セクション「aMainSection」に格納されている値を取得できますか? または、これを行うセクション クラス内に何らかのメソッドを作成する必要がありますか? 提供されたヘルプに感謝します。
php - バックトレースを使用して失敗したファイルインクルードを追跡するにはどうすればよいですか?
これについてまともな考えを求める:
PHPコードに、任意の外部コードを実行し、インクルージョンの1つが失敗した場合にコールバック関数を呼び出すメカニズムを実装したいと思います( include
、require
+ *_once
)。
外部コードとは、実行されるコードが私によって作成されておらず、制御できないことを意味します。テスト用に含まれています。したがって、インクルージョンの失敗に関する詳細な情報をより深く持つことは役に立ちます。
PHPの致命的なエラーが発生したときにコールバックを行うことが不可能に見えるという問題に直面しています。
私がこれまでに試したこと:
- -を介したエラーハンドラの登録
set_error_handler
-致命的なエラーでは機能しません。 - メソッドを使用してオブジェクトインスタンスを作成しました
__destruct()
-致命的なエラーで呼び出されません。 - シャットダウン関数を登録しました-致命的なエラーでは呼び出されません。
debug_backtrace
これらのいずれにおいても、私はaをフェッチして、与えられた情報を処理したかっただけです。
したがって、すぐに質問があります。PHPコード内から失敗したファイルインクルードを追跡し、関数を呼び出す方法です。
私の最近の試みと検索からの質問への答えがノーであると私は恐れているので、洞察に満ちたものは何でも高く評価されます。たとえあなたの答えが「不可能」な点を強化するだけだとしても。
さらに、どのファイルが含まれるかを見つけることができる場合にも役立ちます。したがって、少なくとも含める前に(失敗するかどうかにかかわらず)デバッグ出力を作成することができます。
備考:
- 拡張機能なしが望ましい。しかし、何かがあれば、私も知りたいです。
- 外部コードとは、実行されるコードが私によって作成されておらず、制御できないことを意味します。テスト用に含まれています。したがって、インクルージョンの失敗に関する詳細な情報をより深く持つことは役に立ちます。
関連している:
- エラー時にPHPにバックトレースを生成させるにはどうすればよいですか?
- set_error_handler()は、致命的なエラー(
register_shutdown_function
+error_get_last
)に対して機能しません
java - 親配列リストを参照するメソッドの作成
だから私はこれに似た質問をしましたが、私がやろうとしていたことで得られた答えはうまくいかなかったと思います.
このクラスがあるとします:
Java コード
そして、ドライバークラスでこの方法で初期化された子セクション...
基本的に、「aChildSection」の配列リストから親を返すセクション クラスにメソッドを追加する方法を教えてもらえますか?
linux - コールスタックでmalloc/freeを使用したシグナルハンドラーからのLinux 64ビットでのバックトレース
以下は、「Red Hat Enterprise Linux 5.5 (Tikanga) Kernel 2.6.18-194.el5xen x86_64」OS を実行しているマシンで使用したいソースの例です。
一般的な考え方は、いくつかのスレッドのバックトレースが必要なため、そのスレッドの SIGUSR1 シグナルを発生させ、ハンドラーが backtrace() 呼び出しを行うというものです。
以下の私のシナリオでは、FrameTwo 関数は malloc と free をループで呼び出します。この特定のスレッドに対してシグナルが発生し、free または malloc が呼び出しスタックにある場合は常に、シグナル ハンドラーが backtrace() を呼び出すと、プログラムがクラッシュします。
バックトレースをシグナルハンドラから呼び出すべきではないことを他のソースから学んだので、この場合のために独自の関数 grok_and_print_thread_stack() を作成しました。
RBP レジスタを使用してスタックをナビゲートします (RBP には、前のフレームのベース ポインタを指す現在のフレームのベース ポインタが含まれています) が、このアルゴリズムはこの場合も機能しません: _int_free () がコールスタックにある場合、RBP _int_free の RBP が有効なフレームのベース ポインターではない 0x20 のような値であるため、レジスタ ナビゲーション アルゴリズムが壊れます。
レジスタからコールスタックをナビゲートする方法を知っている人はいますか? または、バックトレースを目的に使用するにはどうすればよいですか?