clion


#include <stdio.h>
#include <stdlib.h>
static int * g_count = NULL;
__attribute__((constructor)) void load_file()
{
printf("Constructor is called.\n");
}
__attribute__((destructor)) void unload_file()
{
printf("destructor is called.\n");
}

int main()
{
int d = 11;
d++;
printf("this is main function %d\n", ++d);
return 0;
}

 

 

CLion 是 JetBrains IDE 全家桶產品之一,可以用來開發 C/C++ 項目,而 GDB 則可以用來對 C/C++ 程序進行調試。

作為一款調試器,GDB 為程序開發人員提供了強大的調試功能,但卻需要使用命令來執行調試操作,操作起來不是很方便。(有關 GDB 的使用,可以參考文章《GDB 調試》。)為此,CLion 為程序開發人員提供了圖形化的調試界面以方便調試。另外,CLion 還提供了遠程調試的功能。因為在實際項目中,我們常會碰到在本地開發環境編寫代碼,程序卻在遠程機器運行的情況。遠程調試功能對我們來說是十分必要的。

本文講述如何使用 CLion 來實現遠程調試。

環境准備

假設本地開發環境是 Windows 操作系統,程序遠程執行環境是 CentOS 操作系統。為滿足遠程調試,需要在 CentOS 上安裝必要的軟件,安裝的軟件包括:

  • cmake
  • gcc
  • gdb
  • gdbserver

安裝命令如下:

yum install cmake -y yum install gcc-c++ -y yum install gdb -y yum install gdb-gdbserver -y 
  • 1
  • 2
  • 3
  • 4

cmake 用於管理編譯過程,生成 Makefile 文件;gcc-c++ 是編譯器;gdb 是個調試工具,程序調試功能實際上就是由 gdb 提供的;gdbserver 用於監聽某個 TCP 端口,允許遠程主機連接,以實現遠程調試功能。

至於本地開發環境,Windows 操作系統上安裝好最新版本的 CLion ,以筆者為例,當前 CLion 最新版本為 2018.3。

代碼同步

使用 CLion 創建一個 C++ 項目 helloworld。然后,打開菜單 Tools - Deployment - Configuration,配置遠程主機以及本地目錄與遠程目錄的映射關系:


右鍵項目文件夾,選擇 Deployment - Upload to 10.88.115.114,便將項目源代碼上傳至 10.88.115.114 主機上。

上述我們配置了遠程主機與本地主機目錄映射,因此執行上傳操作后,可以看到源代碼已被上傳至上述配置的目錄中。

代碼編譯

CLion 為我們生成了默認的源代碼main.cpp,修改 main.cpp,增加一個 add 函數,方便展示調試功能:

#include <iostream> using namespace std; int add(int a, int b) { int sum = a + b; return sum; } int main() { std::cout << "Hello, World!" << std::endl; int sum = 0; sum = add(5, 3); std:cout << "sum of 5 and 3 is " << sum << std::endl; return 0; } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

修改 main.cpp 源代碼后,需要重新將代碼上傳至遠程機器。

CLion生成的 CMakeLists.txt 如下,使用 C++98 標准,指定生成的可執行文件名為 helloworld

project(helloworld)

set(CMAKE_CXX_STANDARD 98)

add_executable(helloworld main.cpp)
  • 1
  • 2
  • 3
  • 4
  • 5

由於上面我們已將源代碼上傳至 10.88.115.114 主機,進入 10.88.115.114 目錄 /home/lihao/code/cpp/hello,然后執行以下操作:

$ cd /home/lihao/code/cpp/hello $ mkdir build $ cd build $ cmake .. -DCMAKE_BUILD_TYPE=Debug $ make 
  • 1
  • 2
  • 3
  • 4
  • 5

執行 cmake 命令會生成 Makefile 文件,指定 -DCMAKE_BUILD_TYPE=Debug 是為了支持 gdb 調試。

執行 make 命令會在 build 目錄下編譯生成可執行文件:helloworld。

遠程調試

經過上述的操作步驟,接下來我們就可以實施遠程調試了。

在遠程主機繼續執行命令:

gdbserver :1234 /home/lihao/code/cpp/hello/build/helloworld
  • 1

即指定 gdbserver 監聽端口 1234,輸出:

Process /home/lihao/code/cpp/hello/build/helloworld created; pid = 12496
Listening on port 1234

返回本地 CLion,配置遠程調試信息,增加一個 GDB Remote Debug 配置:

然后輸入以下配置信息:

設置斷點,按下調試按鈕,可以看到程序已被執行起來,且中斷在斷點處,可以看到變量值:

需要指出的是,helloworld 程序的運行是在遠程主機,並不是本地主機,CLion 通過向 gdbserver 發送調試命令從而達到控制遠程主機上的 gdb 的目的。

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM