成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Emacs調試秘籍之GUD調試器

系統 Linux
本文簡短地對 Emacs 的調試工具 GUD 的特性進行了探索。我們一起來看看吧。

 

本文簡短地對 Emacs 的調試工具 GUD 的特性進行了探索。

如果你是一個 C 或 C++ 開發者,你很可能已經使用過 GDB(GNU 調試器),毫無疑問,它是現今最強大、最無可匹敵的調試器之一。它唯一的缺點就是它基于命令行,雖然仍能提供許多強大的功能,但有時也會具有一些局限性。這也就是為什么聰明的人們開始追求整合了編輯器和調試器的圖形化 GUI 集成開發環境Integrated Development Environment。仍有些開發者堅信使用鼠標會降低工作效率,在 GUI 上用鼠標點~點~點~是來自惡魔的誘惑。

因為 Emacs 是現今最酷的文本編輯器之一,我將為你展示如何在不碰鼠標且不離開 Emacs 的情況下,實現寫代碼、編譯代碼、調試代碼的過程。

GUD(LCTT 譯注:全稱大統一調試器Grand Unified Debugger,鑒于其縮寫形式更為人熟知,以下全文將使用縮寫替代此全稱)是 Emacs 下的一個模式mode,用于在 Emacs 中運行 GDB。它向 GDB 提供了 Emacs 的所有特性,使用戶無需離開編輯器就可以對代碼進行調試。

使用 GUD 的前期準備

如果你正在使用一個 Linux 機器,很可能你已經安裝了 GDB 和 gcc,接下來就是要確保已經安裝了 Emacs。以下的內容我將假設讀者熟悉 GDB 并且至少用它做過基本的調試。如果你未曾接觸過 GDB,你可以做個快速入門,這些資料在網上隨處可得。

對于那些 Emacs 新手,我將向你介紹一些基本術語。縱覽整篇文章,你將看到諸如 C-c M-x 等快捷鍵。此處 C 代表 Ctrl 鍵,M 代表 Alt 鍵。C-c 代表 Ctrl 鍵和 c 鍵被同時按下。如果你看到 C-c c,它代表同時按下 Ctrl 鍵和 c 鍵,釋放后緊接著按下 c 鍵。在 Emacs 中,編輯文本的主要區域被稱為主緩沖區main buffer,而在 Emacs 窗口下方用于輸入命令的區域被稱為迷你緩沖區mini buffer

啟動 Emacs,并按下 C-x C-f 來創建一個新文件。Emacs 將提示你輸入一個文件名,此處讓我們將文件命名為 buggyFactorial.cpp。一旦文件打開,輸入如下代碼:

  1. #include<iostream>
  2. #include <assert.h>
  3.  
  4. int factorial(int num) {
  5. int product = 1;
  6. while(num--) {
  7. product *= num;
  8. }
  9. return product;
  10. }
  11. int main() {
  12. int result = factorial(5);
  13. assert(result == 120);
  14. }

使用 C-x C-s 快捷鍵保存文件。文件保存完畢,是時候進行編譯了。按下 M-x,在彈出的提示符prompt后輸入 compile 并點擊回車。然后在提示符后,將內容替換為 g++ -g buggyFactorial.cpp 并再次點擊回車。

圖 1: Emacs 迷你緩沖區中編譯命令

這將在 Emacs 中開啟另一個緩沖區,顯示編譯的狀態。如果你的代碼輸入沒有錯誤,你將預期得到如圖 2 所示的緩沖區。

圖 2: 編譯狀態

要想隱藏編譯緩沖區,首先確保你的光標在編譯緩沖區中(你可以不使用鼠標,而是通過 C-x o 快捷鍵將光標從一個緩沖區移動到另一個),然后按下 C-x 0。下一步就是運行代碼,并觀察是否運行良好。按下 M-! 快捷鍵并在迷你緩沖區的提示符后面輸入 ./a.out

圖 3: 代碼在迷你緩沖區中的輸出

你可以看到迷你緩沖區中顯示斷言失敗。很明顯代碼中有錯誤,因為 5 的階乘是 120。那么讓我們現在開始調試吧。

使用 GUD 調式代碼

現在,我們的代碼已經編譯完成,是時候看看到底哪里出錯了。按下 M-x 快捷鍵并在提示符后輸入 gdb。在接下來的提示符后,輸入 gdb -i=mi a.out。如果一切順利,GDB 會在 Emacs 緩沖區中啟動,你會看到如圖 4 所示的窗口。

圖 4: Emacs 中的 GDB 緩沖區

gdb 提示符后,輸入 break main 來設置斷點,并輸入 r 來運行程序。程序會開始運行并停在 main() 函數處。

一旦 GDB 到達了 main 處設置的斷點,就會彈出一個新的緩沖區顯示你正在調試的代碼。注意左側的紅點,正是你設置斷點的位置,同時會有一個小的標志提示你當前代碼運行到了哪一行。當前,該標志就在斷點處(如圖 5)。

圖 5: GDB 與代碼顯示在兩個分離的窗口

為了調試 factorial 函數,我們需要單步運行。想要達到此目的,你可以在 GBD 提示符使用 GDB 命令 step,或者使用 Emacs 快捷鍵 C-c C-s。還有其它一些快捷鍵,但我更喜歡 GDB 命令。因此我將在本文的后續部分使用它們。

單步運行時讓我們注意一下局部變量中的階乘值。參考圖 6 來設置在 Emacs 幀中顯示局部變量值。

圖 6: 在 Emacs 中使用獨立幀顯示局部變量

在 GDB 提示符中進行單步運行并觀察局部變量值的變化。在循環的第一次迭代中,我們發現了一個問題。此處乘法的結果應該是 5 而不是 4。

本文到這里也差不多結束了,讀者可以自行探索發現 GUD 模式這片新大陸。GDB 中的所有命令都可以在 GUD 模式中運行。我將此代碼的修復留給讀者作為一個練習。看看你在調試的過程中,可以做哪一些定制化,來使你的工作流更加簡單和高效。

 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2010-03-01 11:06:52

Python 調試器

2009-12-14 10:57:34

Ruby調試器

2023-02-28 11:39:55

CMake腳本項目

2011-08-31 16:51:12

Lua調試器

2010-02-24 09:32:24

Python 調試器

2011-08-24 11:08:09

Lua

2011-08-24 16:41:38

lua調試器

2011-08-31 16:39:06

Lua調試器

2022-05-23 09:22:20

Go語言調試器Delve

2011-08-31 16:47:07

Lua調試器

2009-06-23 11:05:05

Mircosoft C

2011-08-25 16:34:27

Lua調試器

2022-07-22 12:45:39

GNU

2023-03-13 00:21:21

調試器斷點開發者

2010-07-23 15:37:22

Perl調試器用法

2016-09-27 20:12:33

Android虛擬機Android動態調試

2011-02-22 11:07:24

Python

2017-06-28 14:21:22

Linux調試器斷點

2017-04-19 21:35:38

Linux調試器工作原理

2019-12-06 14:30:41

GNU調試器GDB修復代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久91| 亚洲国产精品成人无久久精品 | 最新免费av网站 | 中文字幕在线免费观看 | 国产精品久久免费观看 | 成人小视频在线 | m豆传媒在线链接观看 | 99综合在线 | 国产日韩精品视频 | 91看片免费 | 中文字幕一区二区三区四区 | 中文字幕在线精品 | 国产99久久精品一区二区300 | 日日骚网 | 国产精品视频久久 | 成人在线视频免费观看 | 国产一区二区三区精品久久久 | 精品福利av导航 | 亚洲国产一区二区三区 | 亚洲午夜av久久乱码 | 一级视频黄色 | 中文字幕在线观看 | 国产精品一区久久久 | 色婷婷久久 | 在线看av网址 | 日韩毛片在线免费观看 | 亚洲精品久久久久久久久久久久久 | 久久69精品久久久久久久电影好 | 91伊人| 看a网站 | 九九久久国产精品 | 中国美女一级黄色片 | 成人高清视频在线观看 | 无码一区二区三区视频 | 免费在线观看一区二区三区 | 国产精品久久久久久中文字 | 国产在线观看一区二区三区 | 国产一区二区三区四区在线观看 | 美女视频网站久久 | 国产精品高清一区二区三区 | 国产麻豆乱码精品一区二区三区 |