ホームページ  >  記事  >  バックエンド開発  >  クロスプラットフォーム C++ プログラムをデバッグするにはどうすればよいですか?

クロスプラットフォーム C++ プログラムをデバッグするにはどうすればよいですか?

WBOY
WBOYオリジナル
2024-06-04 21:01:08993ブラウズ

クロスプラットフォーム C++ プログラムをデバッグするには、GDB リモート デバッグまたは LLDB リモート デバッグを使用できます。 GDB リモート デバッグ: ターゲット システムに GDB サーバーをインストールし、ターゲット プログラムをコンパイルします。ホスト システムで GDB を使用して、デバッグのためにターゲット サーバーに接続します。 LLDB リモート デバッグ: ホスト システムに LLDB をインストールし、ターゲット プログラムをコンパイルします。ターゲット システム上で LLDB サーバーを起動し、デバッグのためにホスト システムに接続します。

如何调试跨平台 C++ 程序?

クロスプラットフォーム C++ プログラムをデバッグするにはどうすればよいですか?

はじめに

クロスプラットフォーム C++ プログラムのデバッグは、異なるオペレーティング システムやコンパイラで実行できるため、困難な場合があります。この记事では、GDB リモート デバッグと LLDB リモート デバッグを使用してクロスプラットフォーム C++ プログラムをデバッグするためのガイドを提供します。

GDB リモート デバッグ

  1. GDB サーバーのインストール: GDB サーバー (gdbserver) をターゲット システムにインストールします。 gdbserver)。
  2. 目标程序编译:使用 GDB 兼容的标志编译目标程序,例如 -g-gdwarf=2
  3. 启动 GDB 服务器:在目标系统上,运行 gdbserver :端口号 目标可执行文件,其中端口号是任意未使用的端口。
  4. 远程附加:在主机系统上,使用 gdb 工具并远程附加到目标服务器:(gdb) target remote :localhost:端口号
  5. 调试:现在可以在主机系统上对目标程序进行远程调试。

LLDB 远程调试

  1. LLDB 安装:在主机系统上安装 LLDB 调试器。
  2. 目标程序编译:使用 LLDB 兼容的标志编译目标程序,例如 -g-fvisibility=hidden
  3. LLDB 服务器启动:在目标系统上,运行 lldb-server platform --listen :端口号 :程序路径
  4. 远程连接:在主机系统上,运行 lldb 并远程连接到目标服务器:(lldb) platform connect connect://localhost:端口号
  5. ターゲット プログラムのコンパイル: -g-gdwarf=2 などの GDB 互換フラグを使用してターゲット プログラムをコンパイルします。
GDB サーバーを起動します。

ターゲット システムで、gdbserver :portnumber target executable を実行します。ここで、portnumber は未​​使用のポートです。

リモート接続:

ホスト システムで、gdb ツールを使用し、ターゲット サーバーにリモート接続します: (gdb) ターゲット リモート :localhost:ポート番号

デバッグ:
    ホストシステム上のターゲットプログラムをリモートでデバッグできるようになりました。
    LLDB リモート デバッグ
  • LLDB のインストール:
  • ホスト システムに LLDB デバッガーをインストールします。
  • ターゲット プログラムのコンパイル:
  • -g-fvisibility=hidden などの LLDB 互換フラグを使用してターゲット プログラムをコンパイルします。
  • LLDB サーバーの起動:
  • ターゲット システムで、lldb-server platform --listen :portnumber :program path を実行します。

リモート接続: ホスト システムで lldb を実行し、ターゲット サーバーにリモート接続します: (lldb) platform connect connect://localhost:portnumber

  • デバッグ:
  • ホストシステム上のターゲットプログラムをリモートでデバッグできるようになりました。
  • 実際的なケース
  • GDB を使用して、単純なクロスプラットフォーム プログラムをリモートでデバッグします:
  • Target.cpp ソース コード:
    #include <iostream>
    
    int main() {
      std::cout << "Hello from Target!" << std::endl;
      return 0;
    }
  • Target.cpp をコンパイルする:
🎜
g++ -g -gdwarf=2 Target.cpp -o Target
🎜 🎜G DBを開始するサーバー: 🎜🎜
gdbserver :1234 Target
🎜🎜 リモートでサーバーに接続: 🎜🎜
gdb
(gdb) target remote localhost:1234
🎜🎜 ブレークポイントを設定してデバッグ: 🎜🎜
(gdb) break main
(gdb) run
🎜🎜 LLDB を使用して単純なクロスプラットフォーム プログラムをリモート デバッグ: 🎜🎜🎜🎜Target.cpp ソース コード: 🎜 🎜🎜
#include <iostream>

int main() {
  std::cout << "Hello from Target!" << std::endl;
  return 0;
}
🎜🎜 Target.cpp をコンパイルする: 🎜🎜
clang++ -g -fvisibility=hidden Target.cpp -o Target
🎜🎜 LLDB サーバーを起動する: 🎜🎜
lldb-server platform --listen :1234 ./Target
🎜🎜 サーバーにリモート接続する: 🎜🎜
lldb
(lldb) platform connect connect://localhost:1234
🎜🎜 ブレークポイントを設定してデバッグする: 🎜🎜
(lldb) breakpoint set -n main
(lldb) run

以上がクロスプラットフォーム C++ プログラムをデバッグするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。