日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > 充電吧
[導讀]序言考慮到程序員在無桌面Linux的環(huán)境下編寫C/C++程序,如果使用原生的Vim編輯和單步斷點調試比較麻煩,不利于新手使用,所以筆者嘗試使用Qt實現兩臺Linux電腦遠程部署和調試。即程序員在調試電

序言

考慮到程序員在無桌面Linux的環(huán)境下編寫C/C++程序,如果使用原生的Vim編輯和單步斷點調試比較麻煩,不利于新手使用,所以筆者嘗試使用Qt實現兩臺Linux電腦遠程部署和調試。即程序員在調試電腦使用Qt編寫代碼,然后把目標程序部署在正式電腦上。本篇目的是幫助大家擺脫vim,一勞永逸,解決痛點。請讀者不要誤以為Qt Creator只能用來做桌面軟件的,其實它也可以新建純C/C++非桌面的工程,既可以qmake也可以cmake編譯。準備兩臺電腦做驗證,一臺有Linux桌面系統,使用Qt Creator用于編輯源碼調試環(huán)境,另一臺只有終端,無Linux桌面系統,用于服務器正式環(huán)境。Qt Linux版本安裝在調試機。本文以qt-opensource-linux-x64-5.7.1.run為例。Qt下載網址是:http://download.qt.io/official_releases/qt/

兩臺電腦(注意:本文以調試機和目標機作為區(qū)分描述)使用網線連接,相關情況如圖所示:

?

正文

1、確保在Linux調試機安裝了gcc和gdb。

不會安裝的請參考以下文章:

http://www.linuxidc.com/Linux/2015-01/112057.htm

http://blog.csdn.net/yang1982_0907/article/details/38461127??????????????????????????????????????????????????????????

注意事項:

必須安裝有了gcc才能編譯gdb。CentOS 7自動安裝gcc的命令是:yum -y install gcc make glibc

安裝完gcc,執(zhí)行終端命令gcc -v可以查看安裝的版本信息。CentOS 7默認的gcc版本是V4.8.5。

CentOS 7查看ip地址的命令是:ip addr

下載gdb源碼的網址是:http://ftp.gnu.org/gnu/gdb/?編譯gdb源碼之前,必須安裝Texinfo文檔系統。否則,編譯gdb源碼時會報錯configure: error: no termcap library found。

以CentOS 7為例,安裝命令是yum install ncurses-devel

以源碼gdb-7.6.1.tar.gz為例,執(zhí)行命令tar xzvf gdb-7.6.1.tar.gz解壓之后,在一級目錄/gdb-7.6.1/,執(zhí)行以下命令編譯:

cd gdb-7.6.1

./configure

make

make install

然后會在路徑/usr/local/bin/生成gdb文件,執(zhí)行終端命令gdb -v可以查看安裝的版本信息。

2、在Linux目標機安裝gdb和gdbserver

調試機和目標機的gdb版本必須一致。編譯方法一致。

以源碼gdb-7.6.1.tar.gz為例,執(zhí)行命令tar xzvf gdb-7.6.1.tar.gz解壓之后,在一級目錄/gdb-7.6.1/,執(zhí)行以下命令編譯:

cd gdb-7.6.1

./configure

make

make install

然后會在路徑/usr/local/bin/同時生成gdb和gdbserver文件。

目標機的gdbserver至關重要,沒有它就無法單步斷點調試!切記!驗證gdb和gdbserver安裝正確的方法是:

執(zhí)行終端命令

gdb -v

gdbserver --version

如果都能正確顯示版本號,說明安裝成功!

如果是想單獨編譯gdbserver(注:我們這里不需要再執(zhí)行這步驟,因為上面的方法已經包含了),則需要進入/gdb-7.6.1/gdb/gdbserver, 執(zhí)行以下命令編譯:

./configure

make

make install

然后會在路徑/usr/local/bin/生成gdbserver文件,執(zhí)行終端命令gdbserver --version可以查看安裝的版本信息。

3、在Linux調試機設置目標機的信息

Qt Creator菜單->Tools->Options->Devices->Add

新建Linux的通用設備:

?

填入目標機的IP地址(局域網和公網IP均支持),root和密碼:

?

SSH連通之后的表現:


配置遠程調試和編譯的環(huán)境,自定義命名為“firecatTest”:

4、新建一個Non-Qt Project做測試驗證,Non-Qt Project就是指非Qt庫的編程,即原生態(tài)的Linux C/C++編程。

Kit Selection要選擇“firecatTest”:


如果是采用qmake編譯方式,需要在工程的.pro文件加入以下幾句話:

#遠程部署,定義編譯生成的文件在遠程linux目標機的路徑,路徑可以自定義

target.path=/home/firecat/Test

INSTALLS += target

?

編譯,運行,大功告成!會在目標機/home/firecat/Test路徑下生成執(zhí)行文件mywin32。

如果采用cmake方式,文章末尾會講述方法。

?

5、怎么遠程單步調試?前提條件先要關閉Linux目標機的防火墻。

CentOS 7操作防火墻的命令是:

firewall-cmd --state #查看防火墻是否啟用

systemctl stop firewalld #關閉防火墻

關閉防火墻之后怎么辦?如何實現單步斷點調試?記得文章步驟2描述的,要在目標機安裝好gdb和gdbserver。然后,

方法一(推薦):簡單明了,在調試機的工程源碼下好斷點,直接按F5,采用默認方式單步調試。

方法二(不推薦):復雜很多。

(1)在Linux目標機終端運行gdbserver命令:

/usr/local/bin/gdbserver 172.16.6.166:9900 /home/firecat/Test/mywin32

其中172.16.6.166是調試機的IP地址,9900是隨意定的TCP端口號,mywin32是編程生成的目標執(zhí)行文件。

?

(2)在Linux調試機上,設置Qt單步調試的參數:

Qt Creator菜單->Debug->Start Debugging->Attach to Running Debug Server

其中,Server Port指的是TCP端口,Server address指的是目標機的IP地址;

Local executable指的是工程在本地(調試機)的生成文件。

參數設置完畢,點擊ok按鈕,開始調試!!

6、如果不想使用qmake,而是cmake編譯和調試程序,怎么實現?請訪問姊妹篇《使用Qt Creator作為Linux IDE,實現CMake編譯和單步調試》,網址是:

http://blog.csdn.net/libaineu2004/article/details/78448392

注意:CMake遠程生成的目標路徑,默認是/root/xxx??梢允謩有薷腃MakeLists.txt文件更改輸出路徑,SET(EXECUTABLE_OUTPUT_PATH "***").如此一來開發(fā)機和目標機的路徑都會有生成結果。我的實測結果是,貌似路徑里面有home目錄,目標機就不行?例如SET(EXECUTABLE_OUTPUT_PATH "/home/12/"),結果文件開發(fā)機在,但是目標機并不在,而是會在根目錄生成/12的文件夾。再比如"/home/firecat/test"目標機也不在,而是根目錄下生成"test"文件夾。

cmake_minimum_required(VERSION 2.8)  
  
project(untitled)  
add_executable(${PROJECT_NAME} "main.cpp" "test.cpp")  
##SET(EXECUTABLE_OUTPUT_PATH "/home/firecat/test/")  
SET(EXECUTABLE_OUTPUT_PATH "/hellotest/12/34")  


原文鏈接:https://blog.csdn.net/libaineu2004/article/details/62423830

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
換一批
延伸閱讀

CPU親和度通過限制進程或線程可以運行的CPU核心集合,使得它們只能在指定的CPU核心上執(zhí)行。這可以減少CPU緩存的失效次數,提高緩存命中率,從而提升系統性能。

關鍵字: Linux 嵌入式

在Linux系統性能優(yōu)化中,內存管理與網絡連接處理是兩大核心領域。vm.swappiness與net.core.somaxconn作為關鍵內核參數,直接影響系統在高負載場景下的穩(wěn)定性與響應速度。本文通過實戰(zhàn)案例解析這兩個...

關鍵字: Linux 內存管理

對于LLM,我使用b谷歌Gemini的免費層,所以唯一的成本是n8n托管。在使用了n8n Cloud的免費積分后,我決定將其托管在Railway上(5美元/月)。然而,由于n8n是開源的,您可以在自己的服務器上托管它,而...

關鍵字: 人工智能 n8n Linux

在Linux系統管理中,權限控制是安全運維的核心。本文通過解析/etc/sudoers文件配置與組策略的深度應用,結合某金融企業(yè)生產環(huán)境案例(成功攔截98.7%的非法提權嘗試),揭示精細化權限管理的關鍵技術點,包括命令別...

關鍵字: Linux 用戶權限 sudoers文件

Linux內核中的信號量(Semaphore)是一種用于資源管理的同步原語,它允許多個進程或線程對共享資源進行訪問控制。信號量的主要作用是限制對共享資源的并發(fā)訪問數量,從而防止系統過載和數據不一致的問題。

關鍵字: Linux 嵌入式

在云計算與容器化技術蓬勃發(fā)展的今天,Linux網絡命名空間(Network Namespace)已成為構建輕量級虛擬網絡的核心組件。某頭部互聯網企業(yè)通過命名空間技術將測試環(huán)境資源消耗降低75%,故障隔離效率提升90%。本...

關鍵字: Linux 云計算

在Linux內核4.18+和主流發(fā)行版(RHEL 8/Ubuntu 20.04+)全面轉向nftables的背景下,某電商平臺通過遷移將防火墻規(guī)則處理效率提升40%,延遲降低65%。本文基于真實生產環(huán)境案例,詳解從ipt...

關鍵字: nftables Linux

在Linux設備驅動開發(fā)中,等待隊列(Wait Queue)是實現進程睡眠與喚醒的核心機制,它允許進程在資源不可用時主動放棄CPU,進入可中斷睡眠狀態(tài),待資源就緒后再被喚醒。本文通過C語言模型解析等待隊列的實現原理,結合...

關鍵字: 驅動開發(fā) C語言 Linux

在Unix/Linux進程間通信中,管道(pipe)因其簡單高效被廣泛使用,但默認的半雙工特性和無同步機制容易導致數據競爭。本文通過父子進程雙向通信案例,深入分析互斥鎖與狀態(tài)機在管道同步中的應用,實現100%可靠的數據傳...

關鍵字: 管道通信 父子進程 Linux

RTOS :RTOS的核心優(yōu)勢在于其實時性。它采用搶占式調度策略,確保高優(yōu)先級任務能夠立即獲得CPU資源,從而在最短時間內完成處理。RTOS的實時性是通過嚴格的時間管理和任務調度算法實現的,能夠滿足對時間敏感性要求極高的...

關鍵字: Linux RTOS
關閉