EclipseCDT リモート クロスコンパイル、リモート シングル ステップ デバッグ、メイクファイル ベースのルーチン (実際のテストで効果的)

序文:

以前、VSCodeによるLinuxのリモートデバッグに関する記事を書きましたが、その時はスレーブマシンのGCCでプログラムとコードをリモートコンパイルし、ホストマシンのGDBでリモートデバッグしていました。この欠点は、スレーブ マシンにソース コードが存在することになり、スレーブ マシンも GCC と GDB をサポートする必要があることです。

後でさらに拡張すると、VSCoede はスレーブ マシンのクロスコンパイル チェーンを通じてリモートでコンパイルし、生成されたプログラムをスレーブ マシン上で実行します。ただし、リモート デバッグは実装されていません。リモート デバッグが必要な場合は、スレーブマシン この問題はまだ解決されていません。VScode でのリモート デバッグの問題を解決するために、後でブログを公開することを検討します。もちろん、このブログは実際にリモート デバッグの問題を解決しますが、プラットフォームが変更されるだけです。


1.新築

この新しいプロジェクトを 1 ラウンドフォローしてください。プロジェクトがある場合は、この章をスキップしてください。
ステップ 1: [ファイル] -> [新規] -> [C プロジェクト]
ここに画像の説明を挿入します
ステップ 2: プロジェクト名を入力し、makefileproject プロジェクトを選択し、ツール チェーンの [otherToolchain] -> [完了] を選択します。 ステップ 3:
ここに画像の説明を挿入します
プロジェクトを右クリック -> [新規] -> [ソース ファイル]
ここに画像の説明を挿入します
ステップ 4:以下に示す構成に従ってソースファイルを作成します

ここに画像の説明を挿入します
step5: hello プロジェクトを右クリック -> [新規] -> [ファイル] ここに画像の説明を挿入します
step6: hello プロジェクトを選択し、makefile という名前のファイルを作成します。
ここに画像の説明を挿入します
step7: テストコードとメイクファイルルールの
hello.cソースコードを貼り付ける

#include<stdio.h>
int main()
{
	printf("hello1\n");
	printf("edwinwzy\n");
	printf("chengchei\n");
	printf("hello2\n");
	return 0;
}

makefile规则
自分自身のパスの変更に注意してください

#这里是自己的GCC路径
gcc_path = /opt/Xilinx/SDK/2015.4/gnu/arm/lin/bin/
#这里是GCC路径下的GCC编译器
CC     = $(gcc_path)arm-xilinx-linux-gnueabi-gcc
#生成的可执行文件的文件名
execName = hello 

all:
#要单步调试的话这里一定要加 -g 选项
	$(CC) -g hello.c -o $(execName)
#生成的文件移动到这个目录下
	mv -f $(execName) /home/alinx/remote 
clean:
	rm $(execName) *.o *~

最終的なレンダリング:
ここに画像の説明を挿入します


2. リモートコンパイル環境の構築

ファイルはスレーブ マシンに配置されるため、スレーブ マシンで使用する必要があるディレクトリをホスト マシンにマウントする必要があります。ホスト マシン上でマウントされたディレクトリを操作することは、リモート ディレクトリを操作することと同等であり、多少異なります。共有と同様です。
この方法でのみ、EclipseCDT のリモート スレーブ マシン上でデバッガを実行可能ファイルとして指定できます。
この目的のためにいくつかのプラグインを検討した結果、最終的に sshfs というシンプルで使いやすいプラグインを見つけました。

2.1 sshfsをダウンロードしてディレクトリをマウントする

コンソールにsudo apt install sshfs
「y」と入力してインストールし、
ここに画像の説明を挿入します
インストールが完了したらマウントします。

通常の sshfs コマンドはsudo sshfs 用户名@IP地址: 从机要被挂载的目录 挂载到主机的目录位置
このように記述されており、問題はないのですが、開けないという問題が発生し、後で権限の問題であることが判明したため、関連するパラメータが必要でした。
ここで使用するコマンドは次のとおりです:
sudo sshfs -o allow_other [email protected]:/home/ /home/alinx/remote/
このコマンドのパラメータは権限の問題を解決します。ホストのマウント ディレクトリに対応するファイルは空である必要があります。理由については、
私のブログを参照してください:ファイル システムのマウント

入力が完了した後も、ssh リモート ログイン スレーブ ユーザーのパスワードであるパスワードを入力する必要があります。

ここに画像の説明を挿入します

2.2 デバッグ構成

ステップ 1: プロジェクトを右クリックし、[DebugAs] -> [DebugConfigurations] を選択します。
ここに画像の説明を挿入します
ステップ 2: 新しいデバッグ構成を作成します。
ここに画像の説明を挿入しますステップ 3: デバッガーを構成します。
ここに画像の説明を挿入します

ここに画像の説明を挿入します

2.3 EclipseCDT リモート プラグインのインストール

ここに画像の説明を挿入します
このインストールを検索してください。このプラグインはリモート デバッグをサポートしています。
ここに画像の説明を挿入します
ここに画像の説明を挿入します


右下隅に進行状況バーがあり、いっぱいになると小さなウィンドウが表示されます。「信頼」を選択します。
ここに画像の説明を挿入します

ここに画像の説明を挿入します


選ぶRestart Now
ここに画像の説明を挿入します


Eclipseを再起動後、右上にリモートアイコンがない場合は、右上の をクリックしてください。Open Perspective
ここに画像の説明を挿入します


後でビューを簡単に切り替えることができるように、[デバッグ] をクリックすることもお勧めします。
ここに画像の説明を挿入します


Remote System Exploreモードのビューの左側の列をクリックし、ローカルの場所を右クリックして、[新しい接続] を選択します
ここに画像の説明を挿入します


選択しSSH Onlyてクリックnext
ここに画像の説明を挿入します


必要に応じて構成した後、「完了」を選択します
ここに画像の説明を挿入します


このとき、新しく作成された構成情報がインターフェースの左側に表示されます。
ここに画像の説明を挿入します


「Ssh シェル」を右クリックし、「シェルの起動」を選択します。
ここに画像の説明を挿入します


ここでのユーザーIDはスレーブマシンにログインする際に使用するユーザー名で、以下は対応するパスワードです。
ここに画像の説明を挿入します


設定が完了すると、Remote Shell中央に小さなウィンドウが表示され、アカウント名とパスワードが正しいことを確認した後、sshインターフェイスに入ります。
ここに画像の説明を挿入します


2.4 gdbserver のコピー

クロスコンパイル ツール チェーンで対応するものを見つけてgdbserver、それをコピーし、/usr/bin/スレーブ システム ファイルのディレクトリに直接貼り付けます。
通常、gdbserver と先ほどのクロスコンパイル チェーンの gcc は同じフォルダー内にあります。
ちなみに、アクセス許可を与えることを忘れずに、sduo chmod 777 xxx-xxx-gdbserverクロスコンパイルチェーンの gdbserver の接頭辞には xxx を使用してください。実際の状況に応じて変更してください。

コピーするにはどうすればよいですか? 次に、WinSCP などの対応するソフトウェアを使用して、リモートでデータを直接送信します。
もちろん、子機がグラフィカル操作に対応していれば、直接USBディスクに転送することも可能です。
より汎用性を高めるには、送信に SSH と FTP 送信を統合したいくつかのプロトコルを使用します。例: SecureCRT
もちろん、先ほど述べた sshfs マウントも共有ファイルと同様の方法で転送できます。
方法はたくさんありますし、人によっても違うので、これくらいしか書きません。


3. デバッグ

自動的に生成することを選択したため、「今すぐデバッグを構成するとき」Enable auto to build、ファイルが最初に実際に生成され、その後デバッグが有効になります。
デバッグ バグの横にあるドロップダウン ボタンをクリックし、構成したばかりのデバッグ構成を選択します。

ここに画像の説明を挿入します

この時点では、スレーブ マシンで gdbserver サービスが有効になっていないため、右下隅はおそらく 96% で止まってしまいます。


リモート シェル ビューを開き、
ここに画像の説明を挿入します
リモート接続後、入力フィールドに次のように入力しますgdbserver 192.168.1.102:1234 /home/hello注: この内容は変更する必要があります
フィールドの意味を説明します。gdbserver 主机IP:端口号 调试程序所在目录、独自のマスターとスレーブに従って変更します。

すると、インターフェイスは自動的に hello.c の main 関数の最初の文にジャンプして停止し、シングルステップのデバッグが可能になり、コードの 1 対 1 対応も可能になります。


要約:

この構成プロセスは、最初に開始したときは非常に時間がかかりましたが、今でも非常に便利です。
リモート デバッグに関する現在の問題は、makefile を使用して中規模のプロジェクトを作成するときに、cpp ファイルの中間ファイルを生成した後、すべての中間ファイル.oを結合して.oターゲット ファイルを生成することです。このオプションはコンパイル中に使用されましたが-g.cppソース ファイルが見つからない状況が依然としてあり、まだ解決されていません。

2023.5.31更新:ソースファイルが見つからない問題を解決しました

おすすめ

転載: blog.csdn.net/Edwinwzy/article/details/130955263