記事ディレクトリ
序文:
以前、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更新:ソースファイルが見つからない問題を解決しました