目次
1.原則
組み込みシステムは通常、PC側でgdbツールを実行し、ソースコードもPC側にあります。ソースコードに対応する実行可能ファイルは、実行するために開発ボードに配置されます。このためには、開発ボードでgdbserverを実行し、ネットワークを介してPC側のgdbと通信する必要があります。したがって、PC上のgdbを介して組み込みプログラムをデバッグする場合は、gdbとgdbserverの2つが必要です。gdbはPC上で実行され、gdbserverは開発ボードに移植する必要があります。
二、環境構築
通常、クロスコンパイルにはすでにgdbとgdbserverが付属しています。移植せずに組み込みのクロスコンパイラを直接使用し、gdbserverをルートファイルシステムの/ usr / binディレクトリに直接コピーし、開発ボードの起動後にnfsサービスを使用できます。 ubuntuの下のファイルシステム;クロスコンパイラが付属していない場合は、インストール用のソースコードをダウンロードする必要があります
1.クロスコンパイラには付属しています
導入手引き:
gdbserverをrootfsルートファイルシステム/ usr / binにコピーします。
sudo cp /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/gdbserver /home/denghengli/linux/nfs/rootfs/usr/bin/
2.ソースコードのダウンロードとインストールの手順
少し。。。
3、デバッグプロセス
1.ソースコードをデバッグ情報を含む実行可能ファイルにコンパイルしてから、開発ボードにコピーします。たとえば、gdbtest.cファイルはubuntuの下に書き込まれ、gdbtest実行可能ファイルはコンパイルが完了した後に開発ボードに送信されます。
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
unsigned int times = 0;
while (1)
{
printf("runging times: %d \r\n", times);
times++;
sleep(1);
}
}
コンパイル:
arm-linux-gnueabihf-gcc gdbtest.c -o gdbtest -g //编译测试程序,注意 -g选项
rootfsルートファイルシステムにコピーします(開発ボードの起動後、nfsサービスを介してubuntuの下のルートファイルシステムを使用します):
sudo cp gdbtest /home/denghengli/linux/nfs/rootfs/lib/modules/4.1.15/
2.開発ボードで、gdbserverを起動し、デバッグする実行可能ファイルを実行します
gdbserver 192.168.0.107:2000 gdbtest //启动开发板上的 gdbserver
192.168.0.107は指定されたubuntuホストIPです
2000は、デバッグ用に開くポートであり、自由に指定できます。
gdbtestはデバッグ用の実行可能ファイルなので、必ずgdbtestのパスを持ってきてください!!
3. ubuntuでgdbを開き、開発ボードでgdbserverに接続します
arm-linux-gnueabihf-gdb gdbtest //启动gdb调试
target remote 192.168.0.20:2000 //连接到开发板,192.168.0.20为开发板ip
接続が成功すると、192.168.0.20:2000を使用したリモートデバッグが要求されます。
4.デバッグコマンドを使用してデバッグします
12行目にブレークポイントを設定し、cを入力してブレークポイントまで実行すると、プログラムが開発ボードで実行され、コンソールに情報が出力されます。
pを入力して時間情報を出力し、最後にqを入力してデバッグを終了すると、開発ボード上のgdbserverも停止します。
4、gdbで一般的に使用されるコマンド
1. l(リスト)コマンド
すべてのプログラムソースコードを一覧表示します。コマンドの後に、デバッグプログラムのすべてのソースコードが出力されます。ソースコードが出力されない場合は、「l」コマンドを繰り返し押すか、gdbデバッグツールのEnterキーを押して前のコードを繰り返します。コマンド!
2. b(ブレーク)コマンド
ブレークポイントを設定するために使用され、その後に特定の関数または行番号が続きます
3.cコマンド
ブレークポイントまで実行するために使用
4.sコマンド
sコマンド(ステップ)はシングルステップで実行され、この関数は関数に入ります。
5.nコマンド
nコマンド(次へ)もシングルステップ操作ですが、nコマンドは関数に入りません。
6、pコマンド
pコマンド(print)は、変数値を出力するために使用されます。
7、qコマンド
qコマンド(quit)を使用してデバッグを終了し、開発ボード上のgdbserverも停止します。