如果你讀過我寫的使用GDB命令行調試器調試C/C++程序,你就會明白一個調試器對一段C/C++程序來說有多麼的重要和有用。然而,如果一個像GDB這樣的命令行對你而言聽起來更像一個問題而不是一個解決方案的話,那麼你也許會對Nemiver更感興趣。Nemiver 是一款基於 GTK+ 的用於C/C++程序的圖形化的獨立調試器,它以GDB作為其後端。最令人贊賞的是其速度和穩定性,Nemiver是一個非常可靠,具備許多優點的調試工具。
基於Debian發行版,它的安裝時非常直接簡單,如下:
$ sudo apt-get install nemiver
在Arch Linux中安裝如下:
$ sudo pacman -S nemiver
在Fedora中安裝如下:
$ sudo yum install nemiver
如果你選擇自己編譯,GNOME 網站上有最新源碼包。
最令人欣慰的是,它能夠很好地與GNOME環境像結合。
啟動Nemiver的命令:
$ nemiver
你也可以通過執行一下命令來啟動:
$ nemiver [需要調試的可執行程序的路徑]
注意,如果在調試模式下編譯程序(在 GCC 中使用 -g 選項)將會對 nemiver 更有幫助。
還有一個優點是Nemiver的加載很快,所以你馬上就可以看到主屏幕的默認布局。
默認情況下,斷點通常位於主函數的第一行。這樣就可以空出時間讓你去認識調試器的基本功能:
不過我個人喜歡“Run to cursor(運行至光標所在行)”,該選項使你的程序准確的運行至你光標所在行,它的默認按鍵是F11。
斷點是很容易使用的。最快捷的方式是在一行代碼上按下F8來設置一個斷點。但是Nemiver在“Debug”菜單下也有一個更復雜的菜單,它允許你在一個特定的函數,某一行,二進制文件中的位置,或者類似異常、分支或者exec的事件上設置斷點。
你也可以通過追蹤來查看一個變量。在“Debug”中,你可以用一個表達式的名字來檢查它的值,然後也可以通過將其添加到列表中以方便訪問。這可能是最有用的一個功能,雖然我從未有興趣將鼠標懸停在一個變量來獲取它的值。值得注意的是,雖然鼠標懸停可以取到值,如果想要讓它更好地工作,Nemiver是可以看到結構並給出所有成員的變量的賦值。
談到方便地訪問信息,我也非常欣賞這個程序的布局。默認情況下,代碼在上半部分,功能區標簽在下半部分。這可以讓你訪問終端的輸出、上下文追蹤器、斷點列表、注冊器地址、內存映射和變量控制。但是請注意在“Edit”-“Preferences”-“Layout”下你可以選擇不同的布局,包括一個可以修改的動態布局。
自然,當你設置了全部斷點,觀察點和布局,您可以在“File”菜單下很方便地保存該會話,以便你下次打開時恢復。
到目前為止,我們討論的都是Nemiver的基本特征,例如,你馬上開始調試一個簡單的程序需要了解什麼。如果你有更高的需求,特別是對於一些更加復雜的程序,你應該會對接下來提到的這些特征更感興趣。
Nemiver允許你駁接到一個正在運行的進程進行調試。在“File”菜單,你可以篩選出正在運行的進程,並駁接到某個進程。
Nemiver支持遠程調試,你可以在一台遠程機器上設置一個輕量級調試服務器,然後你在另外一台機器上啟動 nemiver 去調試運行在調試服務器上的程序。如果出於某些原因,你不能在遠程機器上很好地駕馭 Nemiver或者GDB,那麼遠程調試對於你來說將非常有用。在“File”菜單下,指定二進制文件、共享庫位置、遠程地址和端口。
如果你的Nemiver是自行編譯的,你可以在“Edit(編輯)”-“Preferences(首選項)”-“Debug(調試)”下給GDB指定一個新的位置。如果你想在Nemiver下使用定制版本的GDB,那麼這個選項對你來說是非常實用的。
當你的程序分支時,Nemiver是可以設置為跟隨子進程或者父進程的。想激活這個功能,請到“Debugger”下面的“Preferences(首選項)”。
總而言之,Nemiver大概是我最喜歡的不在IDE裡面的調試程序。在我看來,它甚至可以擊敗GDB,它和命令行程序一樣深深吸引了我。所以,如果你從未使用過的話,我會強烈推薦你使用。我十分感謝它背後的開發團隊給了我這麼一個可靠、穩定的程序。
你對Nemiver有什麼見解?你是否也考慮它作為獨立的調試工具?或者仍然堅持使用IDE?讓我們在評論中探討吧。