我正在使用KDevelop進行C++開發和調試。看起來像我的地方訪問一個NULL指針,因爲我得到:如何查看使用KDevelop引用空指針的位置?
*** Program received signal SIGSEGV (Segmentation fault) ***
我怎麼能揣摩出它的發生?我希望KDevelop打破這些信號和未處理的異常。
我正在使用KDevelop進行C++開發和調試。看起來像我的地方訪問一個NULL指針,因爲我得到:如何查看使用KDevelop引用空指針的位置?
*** Program received signal SIGSEGV (Segmentation fault) ***
我怎麼能揣摩出它的發生?我希望KDevelop打破這些信號和未處理的異常。
您必須運行調試器內的應用程序。如果您已經有適當的啓動配置,請按KDevelop中的調試按鈕。
在KDevelop中,這將打開調試區域視圖並在GDB中運行應用程序。 碰撞後,按底部欄上的框架堆棧工具視圖。
你走了。
不同於解釋型語言,比如Python和語言不容許明確的內存管理和使用自動垃圾收集,如Java和C#中,你所問的是對C基本上是不可能++使用任何編輯器。原因是當一個指針被創建時,它就是 - 一個指向內存地址的指針。檢查指向地址處的內存是否已被正確分配並且可以訪問直到實際嘗試通過指針訪問內存是不可能的。在一般情況下,有錯誤的三個主要類別:
1)語法(這些也低於第二)
2)編譯時
3)運行時間的一個子類。
在第一種情況下,最現代的IDE就能抓住你嘗試編譯甚至在錯誤。這些是由錯誤的語法引起的錯誤。
在第二種情況下,可以捕獲這些錯誤並編譯時間(這些錯誤通常也是由不正確的語法引起的,但不僅僅是;例如,訪問超出範圍的靜態數組會導致此錯誤)。
在第三種情況下,這些都是隻能在程序運行時捕獲錯誤。你所問的是C++中的這種類型。
所以,做的最好的事情是將運行在調試模式下運行程序。包含在KDevelop中的調試器是一個非常有能力的調試器。你將能夠明確地跟蹤內存分配/刪除。欲瞭解更多信息,請參見這裏:http://userbase.kde.org/KDevelop4/Manual/Debugging_programs
不知道你是如何在'Kdevelop'做到這一點 - 通常這只是「在調試器中運行」的情況。如果沒有其他的東西,你可以在命令行上一直運行它 - 只要確保它是用調試符號編譯的。輸入「where」,當碰撞停止時,它會顯示你如何到達那裏的棧跟蹤。 [順便說一句,除了NULL指針外,可能還有各種其他不好的訪問]。 – 2013-02-11 18:05:46
@MatsPetersson,我在調試器中運行它,它甚至似乎停止在信號。我不知道它在哪裏停止,但... – Grzenio 2013-02-11 19:41:47
再次,不知道如何使用KDevelop - 是否有一個「堆棧」窗口或類似的東西,你需要啓用/帶到前面/視圖(無論它可能被稱爲,然而它完成了)。 – 2013-02-11 19:43:06