問題タブ [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.
linux - Linuxでは、gdb内でサスペンド状態にあるスレッドを見つける方法は?
Linuxで実行されている最大200個のスレッドを持つマルチスレッドプログラムがあります。まあ、これはレガシー プログラムです :) このプログラムは 2.6.29 で debian OS で実行されています。どのスレッドのスタック フレームに functionA のようなものが含まれているかを簡単に調べるにはどうすればよいですか? 「thread apply all bt」を使用して、すべてのスレッドのバックトレースを表示しています。ただし、各スタック フレームを調べて、functionA を含む正しいスレッドを見つける必要があります。
ありがとう!質問子
ruby-on-rails - 私のバックトレースを破壊する必要がありますか?
私は多かれ少なかれこのようなテストをしています:
わざと追加しました
どこかでこのエラーが発生します:
私が何かをうまくやっていくべきとき:
私のバックトレースをサニタイズ/破壊しているアイデアはありますか?私の疑わしいのはshouldaです。これは、例外がセットアップ内で発生した場合、または例外が発生した場合に発生するためです。
重要な場合に備えて、これはRails3プロジェクトです。
c - SIGSEGVによるバックトレース
マルチスレッドプログラムであるansiCでアプリケーションの書き込みをデバッグしています。
時々、メインスレッドでSIGSEGV障害が発生します。
この情報はコアファイルからのものです。私はLinux環境でのデバッグにあまり詳しくありません。問題がどこにあるかを見つけるためにできることはありますか?
編集:すべてのソースファイルは次のようにフラグを付けてコンパイルされます
c++ - sh4-linux のバックトレースは 1 つの関数を返します
プログラム内からコール スタックを出力しようとしています。残念ながら、glibc backtrace() を呼び出すと、常に 1 つのレコード (現在の関数のアドレス) しか返されません。私はsh4-linuxに取り組んでいますが、これがおそらく問題の原因です。x86 アーキテクチャで印刷するのに問題はありませんでした。
コード例:
によってコンパイルされました:
編集: 実際、このコードは正常に動作します。おそらく、何らかのコンパイラ フラグが実際のプロジェクトでこの動作を引き起こす可能性があります。
コンパイラ フラグは次のとおりです。-g -O0 -pipe -fpermissive -frtti -fno-exceptions -ffunction-sections
リンカー フラグ:-lpthread -g -rdynamic -Wl,-gc-sections -Wl,--start-group {Files here} -Wl,--end-group --verbose -Xlinker -lm
EDIT2 :どのフラグが原因であるかがわかりました: -fno-exceptions
. 誰でも理由を教えてもらえますか? そして、このフラグをスキップせずに修復できるとしたら?
EDIT3:まあ、気にしないでください。実はこのフラグは省略できるようです。
c++ - catch ブロックからバックトレースを取得する
バックトレースを使用して、例外がスローされた場所から情報を取得しています。例外のコンストラクターでは、バックトレースを std::string に格納しています。このタイプの例外の catch ブロックでは、このバックトレースを出力しています。
しかし、他の例外タイプの catch ブロックで同じバックトレースを取得することは可能でしょうか?
shell - GDB:バックトレースコマンドの形式:別のシェル/sshで実行するときにフレーム行が複数の行に分割されます
ローカルでBACKTRACEコマンドを使用してGDBを実行すると(Ubuntu 10.10)、次の出力が表示されます。
Ubuntu 9.04ボックスで同じコアダンプをリモート(SSH)で実行すると、次のようになります。
最初のサンプルのように一貫して実行する方法についての提案をいただければ幸いです。そのリモートシェル設定またはGDB自体と関係がありますか?
ありがとうございました
c - dlopen() オブジェクトを操作する際の呼び出し元オブジェクトの決定
dlopen() を介してプラグイン システムを利用する (C) プログラムを作成しています。私が直面している障害は、メインプログラムが、それらを呼び出したプラグインを本当に知る必要があるいくつかの関数をエクスポートすることです (ほとんどの場合、記録を保持するため、メインプログラムに関数ポインターのようなものを追加するため、プラグインを適切にアンロードできます)。プログラム)。
これを行うためのきれいな方法が見つからないようです。これまでに思いついたオプション:
- プラグインがその名前を提供することを要求するか、ロード時に関数への引数として与えるいくつかのデータを提供します。
- すべての関数が誰から呼び出されたかを気にするわけではないため、このオプションは好きではありません。さらに、プラグインが誰であるかについて嘘をつくのをできるだけ難しくしたいと思います
- backtrace() を使用して、前の関数のオブジェクト名を判別します。
- これはかなり醜く、移植性がないようです。
- プラグインがその名前を含むファイルレベルの構造体 (または他の変数) を配置することを要求します (議論のために「plugin_info」と呼びましょう)。次に、プラグインをロードするときに dlsym() を使用して変数を検索し、その名前で (ハッシュのように) インデックスを付けます。次に、プラグインが関数を呼び出すために使用する #define マクロを挿入し、マクロを
&plugin_info
引数として追加します。- これは私が今使っているものですが、ハックのようです。1 つには、マクロに「&plugin_info」を渡す必要があります。「plugin_info」だけを渡すと、プラグインではなく、メイン プログラムから「plugin_info」がプルされます。アドレスで参照すると、正しいものでコンパイルされ、再配置されないようになります。このオプションは未定義の動作のように見えるので嫌いですが、機能します。また、マクロは、プラグイン開発者が関数呼び出しに問題がある場合 (間違った引数の型を渡すなど)、少し混乱させる可能性があります。
他のアイデアやテクニックがあれば、ぜひ知りたいです。
php - 関数がどのように呼び出されたかを伝える
debug_backtrace を見てきましたが、これまでのところ、必要なことを実行していません。
呼び出している関数が「呼び出された」か「エコーされた」かを知る必要があります。このような:
しかし、関数が「エコーされた」上で「呼び出された」場合、関数は異なることを行います。
どうすればいいですか?
php - デバッグログ(PHP)のファイルと行のトレースに関する問題
そこで、デバッグメッセージをその場でログに記録できるメソッドを作成しようとしています。メッセージが発生したファイル名と行番号を含めたいと思います。私の最初の傾向は、現在のファイル名と行番号を含む配列を返すloggingメソッドの引数の1つとしてdebug_backtrace()を指定することでした。
問題は、これは(index.php)と呼ばれる最初のファイルのファイルと行のみを提供することです。index.phpは、インクルードされたファイルのクラスからメソッドを呼び出す5行のファイルにすぎないため、行とファイルの情報は、何があっても常に(index.php、5行目)と表示され、役に立ちません。
コードのどこにいても、現在の行とファイルを取得する方法はありますか?
添加
ファイルと行の情報は次のとおりです。
[2011-01-23 06:26:10]情報: "存在しないコントローラー(テスト)に対してリクエストが行われました。"、ファイル: "/home/spotless/public_html/mymvc/index.php"、行:5、リクエスト: "/テスト"
index.php全体は次のとおりです。
init.phpファイル内のdebug_backtrace()を使用したロギング呼び出しは次のとおりです(37行目)。
2回目の更新
debug_backtraceのvar_dump
array(1){[0] => array(6){["file"] => string(42) "/home/spotless/public_html/mymvc/index.php" ["line"] => int(5 )["function"] => string(4) "init" ["class"] => string(8) "lev_init" ["type"] => string(2) "::" ["args"] = > array(0){}}}
debugging - gdb を使用して特定のスレッドのスタック トレースを取得する
C++ アプリケーション内から gdb を呼び出して、現在のスレッドのみのスタック トレースを出力したいと考えています。
これは、アプリケーション内から assert like マクロのスタック トレースを取得するために使用できます。Gdb は詳細なスタック トレースを提供しますが、これは「手動で」達成するのは非常に複雑です。
それはどのように行うことができますか?