Eclipse/GDBを使用してLinuxリアルタイムターゲットで共有ライブラリをデバッグする

更新しました Jun 1, 2023

環境

ソフトウェア

  • LabVIEW Professional
  • LabVIEW Full

オペレーティング・システム

  • LabVIEW Real-Time (NI Linux Real-Time)

プログラミング言語

  • C
  • C++

その他

ソフトウェアツール: Eclipse IDE, GDB Debugger

NI Linux Real-Time、Eclipse版用C/C++開発ツールを使用して共有ライブラリを作成しました。Eclipse/GDBを使用してLinuxRTターゲット上の共有ライブラリをどのようにデバッグできますか?

共有ライブラリをデバッグするには、2つのデバッグ方法があります。両方とも、NI Linux Real-Time、Eclipse版用C/C++開発ツールスタートアップガイドに記載されている方法を用いてデプロイされる共有ライブラリをビルドしたことを前提としています。このドキュメントは、NI Linux Real-Time(LinuxRT)、Eclipse Edition用C/C++開発ツールをインストールすると付属しています。

また、既存のコードをNI Linux Real-Time(LinuxRT)、Eclipse Edition用のC/C++開発ツールにインポートして、ターゲット上で実行されているLinuxリアルタイムOSに互換性のある特定のクロスコンパイラパスと特定の接頭辞arm-none-linux-gnueabi-を使用してビルドしします。

EclipseでGDBを正しく動作させるには、/usrと/usrlibをターゲットルートファイルシステムからローカルホストのディレクトリ<RootFileSystemDir>にコピーする必要があります。作業を開始する前に、プロジェクトにデプロイ可能なデバッグ設定があることを確認します。

下記のデバッグ方法を実行する前に、次の手順を実行して共有ライブラリ.soファイルをターゲットに転送します。
  1. ファイルメニューバーに移動し、Window>>Open Perspective>>Other>>Remote System Explorerをクリックします。
  2. OKをクリックします。
  3. Define a connection to remote systemボタンをクリックして、New Connection Wizardを開きます。

  4. Generalフォルダの下にあるSSH Onlyを選択します。
  5. Nextをクリックします。
  6. Parent profileプルダウンメニューからリモートシステム接続を含むプロファイルを選択します。
  7. Host nameテキストボックスにLinux Real-Timeターゲットのホスト名またはIPアドレスを入力します。
  8. Finishをクリックします。
  9. Remote System Explorerウィンドウで、ワークスペースディレクトリに移動して、適切なプロジェクトのデバッグフォルダにある.soファイルを探します。
     
  10. .soファイルをターゲットの/usr/libディレクトリにコピーし、ターゲットの下にあるSftp Filesを展開して/usr/libに移動します。

    メモ: 共有ライブラリは、このディレクトリに配置する必要はありません。別のディレクトリに置かれた場合、ライブラリの呼び出しは、パス全体を共有ライブラリに提供する必要があります。
 


 

EclipseでGDBを使用したデバッグ方法: 

デバッグ機能を実行するには、.gbdinitファイルが必要です。これにより、コード内にブレークポイントが設定されます。.gbdinitファイルを作成するには、以下の手順を行います。
  1. Windowsエクスプローラでプロジェクトパスに移動します。
  2. ウィンドウを右クリックします。
  3. New>>Text Document>>File>>Save Asを選択します。
  4. 名前を付けて保存としてすべてのファイルを選択し、.gdbinitという名前を付けます。
  5. Saveを選択します。
  6. ファイル内に下記の2行を入力します。
    set breakpoint pending on
    set sysroot <RootFileSystemDir>
次に、C/C++プロジェクトをデバッグするのドキュメントの下にあるNI Linux Real-Time、Eclipse版用C/C++開発ツールスタートアップガイドの指示に従います。これにより、共有ライブラリをデバッグするように設定されます。新しいプロジェクトは、Debug ConfigurationsメニューのC/C++ Remote Applicationの下に追加する必要があります。共有ライブラリをさらにデバッグするには、下記の手順を行います。
  1. Run>>Debug Configurationsに移動します。
  2. Debug Configurationsウィンドウで、プロジェクトがMainタブを選択されていることを確認します。
  3. 同じタブで、Connectionオプションに移動して、ターゲットを選択します。
  4. Remote Absolute File Path for C/C++ Applicationを変更して、ターゲット上の共有ライブラリを指すように変更します。
  5. Applyボタンの横にあるSelect otherをクリックします。
  6. Select Preferred Launcherウィンドウから、Standard Remote Create Process Launcherがまだ選択されていない場合は、それを選択します。
  7. OKをクリックします。
  8. Debuggerタブに移動します。
  9. Gdbserver Settingsを選択します。
  10. xxxxという形式のポート番号を書き留めます。通常、デフォルト値は2345です。
  11. オペレーティングシステムのコマンドプロンプトを開きます。
  12. gdbserver :xxxx --- attach 'pidof lvrt'コマンドを実行します。ここで、xxxxはポート番号です。
  13. Debug Configurationsウィンドウに戻ります。
  14. Debuggerタブで、Mainタブをクリックします。
  15. GDB DebuggerオプションのBrowseを選択します。
  16. <National Instruments>\Eclipse\toolchain\gcc-4.4-arm\i386\bin\arm-none-linux-gnueabi-gdb.exeに移動します。
  17. Openをクリックします。
  18. GDBコマンドファイルに対してBrowseを選択します。
  19. 現在のプロジェクトの.gdbinitファイルに移動します。
  20. Openをクリックします。
  21. Stop on startupをオフにします。
  22. Apply>>Debugを選択します。
Debug Viewが開き、Eclipseの下部にあるConsoleタブで、アプリケーションをデバッグできるはずです。実行が共有ライブラリのソースコード内に設置したブレークポイントで一時停止されると、このGDB Consoleタブを制御できます。

デバッグを停止するには、コンソールを制御する必要があります。Suspendと書かれた一時停止アイコンをクリックすると、プログラムを停止できます。次に、detachコマンドを入力して、プロジェクトの関連付けを解除します。

メモ: ターゲット上で実行中のVIから共有ライブラリが呼び出され、実行がブレークポイントに到達すると、ターゲット上のlvrtプロセスは中断されます。これにより、ホストはターゲットとの接続を失います。デバッガでブレークポイントがなくなると、ターゲットへの接続が修復されます。



 

GDBコマンドプロンプトとSSHクライアントを使用してデバッグする: 

この方法を使用するには、SSHクライアントが必要です。GDBのコマンドプロンプトとSSHクライアントを使用してデバッグするには、次の手順を行います。
  1. ローカルホスト上でコマンドプロンプトを開きます。
  2. cd C:¥Program Files¥National Instruments¥Eclipse¥toolchain¥gcc-4.4-arm¥i386¥bin¥と入力して、GDBデバッガの場所に移動します。
  3. arm-none-linux-gnueabi-gdb.exeと入力して、デバッガを実行します。
  4. 次のコマンドを入力します。

    set breakpoint pending on
    file C:/<path to the shared object>/ExampleLibrary.so
    set sysroot <RootFileSystemDir>

  5. ここのコマンドプロンプトで任意のブレークポイントを入力します。
  6. cRIO上の開いているTCPポートをxxxxの形式で探します。ここで、xxxxはターゲット上の開いているポート番号です。デフォルト値は通常2345です。
  7. SSHクライアントを開き、次のように入力します。
    gdbserver :xxxx --attach 'pidof lvrt'.
  8. コマンドプロンプトに戻り、次のように入力します。
    target remote <Target Name>:xxxx
デバッグプロセスを終了するには、GDBがcontinueモードになっていないことを確認し、detachと入力します。