問題タブ [libunwind]

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.

0 投票する
2 に答える
1430 参照

c++ - スタック トレースでファイル名と行番号を取得するためのポータブル/標準準拠の方法はありますか?

さっき読んだ

gcc C++ アプリがクラッシュしたときにスタックトレースを生成する方法

これは今ではかなり古いものです(5年)。いくつかの回答は、スタックフレームごとに、関数の名前とオフセット(私が推測するスタック内)を取得できるソリューションを提案しています。しかし、私 (および他の人) が本当に必要としているのは、呼び出しが行われたソース ファイル名と行番号です (コードがデバッグ情報でコンパイルされていると仮定します)。これを行うglibcの一部にリンクされた回答の1つ(libSegfault;このディレクトリ内のファイルを参照- segfault.c、、、)-したがって、backtracesyms.c可能ですbacktracesymsfd.c

私の質問は次のとおりです。

  • この情報は、プラットフォームに依存しない方法で、または何らかの標準 (POSIX??) に準拠する方法で抽出できますか?
  • libunwind がこれをサポートしないのはなぜですか? (ウェブサイトを調べた後、そうではないと思います
  • これは、コンパイラの C/C++ 標準ライブラリ (少なくとも C/C++ アプリの場合) に依存する必要がありますか?

ノート:

  • バイナリにはデバッグ情報があると思われるかもしれません。したがって、C/C++ の場合は-g;でコンパイルされています。もちろん、適切なライブラリでは、デバッグ情報が利用可能かどうかを確認します。
0 投票する
2 に答える
7037 参照

c++ - ライブラリを Cmake プロジェクトに追加する

単に見つからないのかもしれませんが、自分のプロジェクトにコードを追加したいと思っています (ここにある libunwind http://www.nongnu.org/libunwind/download.html ) 。
このライブラリには CMakeLists が付属していません。 txt ファイルを含めようとすると、cmake はこの事実について文句を言います。現在、libunwind ディレクトリを外部コードに追加し、メインの CMakeLists.txt に参照を追加しただけです。

どんな入力でも素晴らしいでしょう。

0 投票する
2 に答える
988 参照

c++ - Libunwind PC 値が addr2line で機能しない

リンクの例に従ってみようとしています: https://eli.thegreenplace.net/2015/programmatic-access-to-the-call-stack-in-c/

しかし、私はいくつかの問題に遭遇しました。libunwind を使用してバックトレース情報を出力するようなコードがあります。

test.cpp

このコードを実行すると、次のような出力が生成されます。つまり、プログラム カウンター値: (function_name+0xoffset)

上記のリンクで述べたように、関数名の左側にあるプログラム カウンターの値を addr2line に入力して、ファイル名と行番号の情報を取得できます。ただし、そうしようとするたびに(たとえば、関数 foo の場合):

objdump ファイルを調べたところ、関数 foo にデバッグ エントリがあることがわかりました。

DW_at_low_pc の値を addrline に入力すると、正しい出力が生成されます。

  1. まず、libunwind によって返される PC 値が DW_AT_low_pc の値と異なるのはなぜですか?

  2. libunwind が PC に対して正しくない値を返しているようですが、その場合、libunwind はどのようにして関数名を取得できますか?

  3. addr2line またはその他のコマンド ライン ツールを使用してファイル名とファイル番号を取得できる、libunwind からの PC 値を指定する方法はありますか?

読んでくれてありがとう、私はそのちょっと長い質問を知っています。