5

私は小さなLinuxベースのSBC(〜32MB RAM)で動作するアプリケーションを開発しています。悲しいことに、私のアプリは最近大きくなりすぎて、GDBで実行できなくなりました。組み込みLinuxで使用できる優れた軽量のデバッグ方法を知っている人はいますか?スレッドのスタックトレースを表示できることでさえ、非常に役立ちます。

このアプリケーションはC++で記述されており、複数のスレッドを実行するため、gdbserverはマルチスレッドのアプリでは機能しないため、使用できません。

前もって感謝します、

マハ

4

5 に答える 5

4

gdbserver は間違いなくマルチスレッド アプリケーションで動作します。現在、25 を超えるスレッドを使用する組み込みプロジェクトに取り組んでおり、常に gdbserver を使用しています。

info threads 

システム内のすべてのスレッドを一覧表示します

thread <thread number from info threads>  

その実行スレッドに切り替わります。

thread apply XXX <command>  

XXX で指定されたスレッドで実行されます。これは「すべて」の場合もあります。したがって、実行中のすべてのスレッドからのバックトレースが必要な場合は、

thread apply all bt

特定のスレッドの実行フローに入ると、通常のコマンドはすべて、単一のスレッド化されたプロセスと同じように機能します。

于 2009-12-03T00:21:24.027 に答える
2

QEMUのようなエミュレーターでアプリケーションを実行し、その上でGDB(またはvalgrindのようなもの)を実行するようなハッキングをしている人の話を聞いたことがあります。痛そうに聞こえますが、うまくいけば……。

libunwind(スタックトレースを取得するため)とprintfスタイルのロギングを使用してどこにでもアクセスできますか?

于 2009-12-02T00:08:26.790 に答える
1

シリアル ポート印刷は、私が考えることができる最も軽量です ~~~ ホスト PC で簡単に見られ、アプリ内のシンプルで軽量なコード ~~

シリアル ポートがない場合は、GPIO ポートを使用し、それを使用してシリアル ポートをシミュレートしました。それは完全にうまくいきましたが、少し遅かったです:-( ~~~

于 2009-12-03T00:15:51.313 に答える
0

独自のデバッガを構築した理由はありますか? ARM プロセッサ (AT91SAM926x) を使用して Linux システムを開発しており、CodeSourcery のコンパイラとデバッガの両方を使用しています。GDB 7 のバージョンはまだリリースされていないと思いますが、gdbserver ツールを使用してマルチスレッド C++ アプリケーションを問題なくデバッグしています。

于 2009-12-07T20:56:08.970 に答える
0

Gdbserver は確かにマルチスレッド アプリケーションで動作します。ただし、ホストがターゲット gdb で動作するようにするには、ホスト用のクロス ターゲット デバッガーをコンパイルする必要があります。

それを行う方法の詳細な説明については、この記事を参照してください。

GDB および GDBserver を使用したリモート クロスターゲット デバッグ

于 2009-12-09T20:50:47.923 に答える