NetBeans遠端除錯Linux C++ 11專案
隨著c++ 11的普及率越來越高,開發c++ 專案的人也越來越多,可以說c++ 11 給了c++ 這門語言第二次生命,而且據筆者瞭解,使用c++ 11 新開發的專案大部分是基於linux的,具體原因不多解釋。當然c++圈子裡面開發工具百花齊放,有人喜歡使用vi作為主力開發工具,有人用eclipse, 有人用visual studio, 也有人喜歡clion, 拋開個人偏好不談,我們來談一下遠端除錯的支援。 說實話,除錯體驗最好的個人認為是直接SSH連上去GDB除錯,但是這樣做有一個問題就是修改程式碼,和跳轉程式碼不是特別友好,如果需要大量改程式碼,分析邏輯,同時除錯,可能開發體驗不是特別好。筆者要介紹的是一種基於NetBeans遠端除錯Linux c++ 11專案,具體效果如下。其實NetBeans最早是作為Java開發工具而出名的,因此很多人沒有太注意他其實也可以開發c++專案,而且對makefile/cmake的支援還比較出眾。
示例程式碼如下:
#include <stdio.h>
#include <stdlib.h>
/**
* power - Calculate the power of number.
* @param base: Base value.
* @param exponent: Exponent value.
*
* @return base raised to the power exponent.
*/
double power(double base, int exponent)
{
int result = base;
int i;
if (exponent == 0) {
return 1;
}
for(i = 1; i < exponent; ++i){
result = result * base;
}
return result;
}
int main(int argc, char *argv[])
{
while(1)
{
int a = 0;
}
if (argc < 3){
printf("Usage: %s base exponent \n", argv[0]);
return 1;
}
double base = atof(argv[1]);
int exponent = atoi(argv[2]);
double result = power(base, exponent);
printf("%g ^ %d is %g\n", base, exponent, result);
return 0;
}
cmake_minimum_required (VERSION 2.8)
set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
project (Demo1)
add_executable(Demo main.cc)
但是遠端除錯是需要設定的,而且網上這方面的資料不是特別多,那麼我就把重點的部分和大家分享一下,第一個重點的設定是下圖的構建結果,這項必須要要填,NetBeans根據這個去找可執行檔案,否則會報如下的錯誤。
第二個問題是NetBeans遠端attach到程序的時候會報如下到錯誤 gdb attach fails with ptrace: Operation not permitted, 解決方案如下:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
總結
本位給出了一種基於NetBeans的linux c++ 11 遠端除錯方案,NetBeans遠端除錯對makefile和cmake工程都有比較好的支援,親測可用。使用NetBeans遠端除錯的另外一個好處是程式碼跳轉比較方便,再也不用配置mingw/cygwin了,因為我們已經可以在Linux檔案系統中隨意跳轉了。