問題タブ [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.
ruby-on-rails-3 - Rails 3.1.3 - backtrace_silencers 初期化ファイル エラー
backtrace_silencers 初期化ファイルに次のようなものを追加しました。
例外が発生すると、Rails サーバーで次のエラー メッセージが表示されます。
フェイルセーフ応答中のエラー: 間違った引数タイプのパス名 (正規表現が必要) .../config/initializers/backtrace_silencers.rb:2:`gsub' 内
ここでは、b/c gsub が例として使用されています。
http://api.rubyonrails.org/classes/ActiveSupport/BacktraceCleaner.html
何が起こっているのか分かりますか?
ios - Main.m の iOS SIGABRT (バックトレース提供)
main.m で SIGABRT エラーを取得します。誰かが私を正しい方向に向けることができるかどうかを確認するために、コンソールからのバックトレースをリストしました.
コピーできたコアダンプ情報です。SIGABRT は、main.m の autorelease ステートメントで発生します。
...
c - x86_64 呼び出し規約とスタック フレーム
Ubuntu Linux で実行されている x86_64 マシン用に GCC (4.4.3) が生成している実行可能コードを理解しようとしています。特に、コードがスタック フレームを追跡する方法がわかりません。昔の 32 ビット コードでは、ほぼすべての関数でこの「プロローグ」を目にすることに慣れていました。
その後、関数の最後に「エピローグ」が表示されます。
または単に
同じことを達成します:
- スタック ポインタを現在のフレームの先頭、リターン アドレスのすぐ下に設定します。
- 古いフレーム ポインタの値を復元します。
64 ビット コードでは、objdump の逆アセンブルからわかるように、多くの関数がこの規則に従っていません。%rbp をプッシュせず、%rsp を %rbp に保存しません。GDB のようなデバッガはバックトレースをどのように構築しますか?
ここでの私の本当の目標は、実行がプログラムのさらに先の任意の関数の開始点に到達したときに、ユーザー スタックのトップ (最高アドレス) と見なす妥当なアドレスを見つけようとすることです。たとえば、「トップ」の場合、argv の元のアドレスが理想的ですが、main が呼び出す任意の関数からアクセスすることはできません。最初は、古いバックトレース メソッドを使用できると考えていました。保存されたフレーム ポインター値が 0 になるまで、保存されたフレーム ポインター値を追跡し、その後の次の値が実用的な最高値としてカウントされます。(これは argv のアドレスを取得することと同じではありませんが、たとえば、_start または _start が呼び出すもの [たとえば、__libc_start_main] のスタック ポインターの値を調べることはできます。)
ありがとう。
c - バックトレースは Linux x86_64 でどのように機能しますか?
いくつか質問があります:
- int backtrace(void **buffer, int size); ここで buffer はポインタの配列です。戻り値の配列要素は、スタックの各フレームへのポイントを返します。では、backtrace() は内部で malloc() をフレーム数の回数だけ呼び出すのでしょうか? これはなぜですか?
- 上記の割り当てられたメモリは backtrace() から freed() されていません。では、このメモリを解放するのは誰でしょうか?
- backtrace() 内から malloc() を回避する方法はありますか?
- backtrace() のソース コードはどこにありますか?
- アセンブリでバックトレースするコードを書くにはどうすればよいですか?
java - Javaデバッグでのバックトラック
私は、Javaデバッグを行うときにバックトラックできるかどうかの答えを探していました。たとえば、私がコードを持っている場合:
そして、私が例外にぶつかっているなら、私は戻りたいと思います。また、フレームをドロップするだけでなく、ヒープに加えられた実際の変更を元に戻します。それは現在可能ですか?
前もって感謝します。
arm - ARM9 でのバックトレースのサンプル コードはありますか?
ARM9 アーキテクチャで backtrace ユーティリティのように動作するコードを書きたいです。
arm で ulibcのコードバック トレースを見つけました。しかし、上記のコードから、上記のコードで使用されているデータ構造のレイアウトとパラメーターの詳細を知りたいです。誰でも上記に光を当てることができますか?
前もって感謝します。
c++ - make_shared() のデバッグ可能な代替品
gcc 4.6.2 を使用すると、コンストラクターが例外をスローした場合、make_shared() は役に立たないバックトレースを返します (何らかの再スローが原因と思われます)。タイピングを少し節約するために make_shared() を使用していますが、これはショーストッパーです。通常のバックトレースを可能にする代わりのmake_shrd()を作成しました。gdb 7.3.1 を使用しています。
私はそれが心配です:
- make_shared() の下の悪いバックトレースは、どういうわけか私自身のせいです
- 私の代わりの make_shrd() は微妙な問題を引き起こします。
ここにデモがあります:
以下でコンパイル:
以下でデバッグ:
make_shared() バックトレースは、例外の時点までのスタックを表示しないジャンクです。他のすべてのオプションは、適切なバックトレースを提供します。
助けと提案を前もってありがとう。
android - Android NDK のデバッグとバックトレースでの疑問符
これ以上言う前に、このソフトウェアは完全に正気であり、Android サンプルから取得したものであり、クラッシュしないということから始めさせてください :)。
私のチームは最近、Android から正常なバックトレースを取得するのに苦労しています。私たちは LibC から出力を取得します...これが有効なバックトレースを取得する唯一のコンポーネントのようです。それ以外のものは疑問符と浅いバックトレースのみを生成します (したがって、通常は最初に壊れます??、そのポイントを超えて何も表示されないため、通常、たとえばvsnprintfのみが表示されます...それだけです。
私たちは実験を続け、最終的にサンプルからほぼ完全にコピーされたまったく新しいプロジェクトを作成しました。
AndroidManifest.xml には正しいフラグが設定されています。
/li>build.xml にはビルド前のルールがあります。
/li>Application.mkには次の定義があります。
/li>Android.mkファイルでさえ、いくつか調整されています。
/li>
-gstabs+
とを試してみまし-g -ggdb
たが、それでも同じバックトレースが得られます。
2 番目の呼び出しは - 間違いなく - ALooper_pollAll
libc を呼び出すネイティブ コードepoll_wait
です。しかし、 に到達する参照はありませんandroid_main
。
コードは完璧です。cを押して、クラッシュすることなく何時間も実行できますが、停止してバックトレースを出力すると、いつでも同じ 2 行が返されます。
すべての助けと提案に深く感謝します。私たちの製品でいくつかの問題が発生しました..まあ、私たちが今考えることができる唯一の手段は本当に中世です.
gdb - gdb バックトレースを比較するアルゴリズム/コード
ある種のデータベースでバックトレース (テキスト形式で持っている) の複製を見つける必要があります。理想的には、高速な検索方法 (ハッシュベース?) と、より低速で正確な検索方法が必要です。
本格的なクラッシュ レポート システムではなく、バックトレースを比較する部分だけが必要です。しかし、そのような (オープン ソース) システムのコードを使用することは理にかなっています。
これまでに見つけたのは、複雑なソリューションのみです。
- https://wiki.ubuntu.com/アポート
- https://fedorahosted.org/abrt/wiki
- https://launchpad.net/bugzilla-traceparser
- https://crash-stats.mozilla.com/products/Firefox
これを行う方法について何か提案はありますか?
gdb - GDB でデバッグするためにバックトレース アドレスを解釈する方法
backtrace() と backtrace_symbols() を使用して、SIGSEGV のバックトレースとその他のシグナルを次のような形式で出力しています。
この特定のケースでは、フレーム #7 は問題ありませんが、フレーム 1 から 6 はある種の「+x」アドレスを提供します。
「+0x6f42a」およびGDBの他のアドレスの逆アセンブルで正確な行を取得するには? また、モジュールが記述されていないフレーム #0 は何を意味するのでしょうか?