Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menyahpepijat program C++ merentas platform?

Bagaimana untuk menyahpepijat program C++ merentas platform?

WBOY
WBOYasal
2024-06-04 21:01:08993semak imbas

Untuk nyahpepijat program C++ merentas platform, anda boleh menggunakan penyahpepijatan jauh GDB atau penyahpepijatan jauh LLDB: Penyahpepijatan jauh GDB: Pasang pelayan GDB pada sistem sasaran dan susun atur cara sasaran. Gunakan GDB pada sistem hos untuk menyambung ke pelayan sasaran untuk penyahpepijatan. Penyahpepijatan jauh LLDB: Pasang LLDB pada sistem hos dan susun atur cara sasaran. Mulakan pelayan LLDB pada sistem sasaran dan sambungkan ke sistem hos untuk penyahpepijatan.

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

Bagaimana untuk nyahpepijat program C++ merentas platform?

Pengenalan

Menyahpepijat program C++ merentas platform boleh mencabar kerana ia boleh dijalankan pada sistem pengendalian dan penyusun yang berbeza.この记事 menyediakan panduan untuk menyahpepijat program C++ merentas platform menggunakan penyahpepijatan jauh GDB dan penyahpepijatan jauh LLDB.

GDB Remote Debugging

  1. Pemasangan Pelayan GDB: Pasang pelayan GDB (gdbserver) pada sistem sasaran. 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. Sasarkan kompilasi program: Kompilasi program sasaran menggunakan bendera serasi GDB, seperti -g dan -gdwarf=2.
Mulakan pelayan GDB:

Pada sistem sasaran, jalankan gdbserver :portnumber target executable, dengan portnumber ialah sebarang port yang tidak digunakan.

Lampiran jauh:

Pada sistem hos, gunakan alat gdb dan lampirkan dari jauh ke pelayan sasaran: (gdb) target remote :localhost:port number.

Nyahpepijat:
    Kini boleh menyahpepijat program sasaran dari jauh pada sistem hos.
    Penyahpepijatan Jauh LLDB
  • Pemasangan LLDB:
  • Pasang penyahpepijat LLDB pada sistem hos.
  • Kompilasi program sasaran:
  • Kompilasi program sasaran menggunakan bendera serasi LLDB, seperti -g dan -fvisibility=hidden.
  • Permulaan pelayan LLDB:
  • Pada sistem sasaran, jalankan platform pelayan lldb --listen :port number :program path.

Sambungan jauh: Pada sistem hos, jalankan lldb dan sambung dari jauh ke pelayan sasaran: (lldb) platform connect connect://localhost:port number.

  • Nyahpepijat:
  • Kini boleh menyahpepijat program sasaran dari jauh pada sistem hos.
  • Kes praktikal
  • Gunakan GDB untuk menyahpepijat dari jauh program merentas platform mudah:
  • Target.cpp Kod sumber:
    #include <iostream>
    
    int main() {
      std::cout << "Hello from Target!" << std::endl;
      return 0;
    }
  • g++ -g -gdwarf=2 Target.cpp -o Target
🎜🎜 Sasaran 🎜Mulakan G DB pelayan: 🎜🎜
gdbserver :1234 Target
🎜🎜 Lampirkan pada pelayan dari jauh: 🎜🎜
gdb
(gdb) target remote localhost:1234
🎜🎜 Tetapkan titik putus dan nyahpepijat: 🎜🎜
(gdb) break main
(gdb) run
🎜🎜 Nyahpepijat jauh program merentas platform mudah menggunakan LLDB🎜: 🎜 Kod Sumber: 🎜Target Sumber: 🎜 🎜 🎜
#include <iostream>

int main() {
  std::cout << "Hello from Target!" << std::endl;
  return 0;
}
🎜🎜Kompilasi Target.cpp: 🎜🎜
clang++ -g -fvisibility=hidden Target.cpp -o Target
🎜🎜Mulakan pelayan LLDB: 🎜🎜
lldb-server platform --listen :1234 ./Target
🎜🎜Sambung ke pelayan dari jauh: 🎜🎜
lldb
(lldb) platform connect connect://localhost:1234
dan 🎜 breakpointee dan 🎜
(lldb) breakpoint set -n main
(lldb) run

Atas ialah kandungan terperinci Bagaimana untuk menyahpepijat program C++ merentas platform?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn