回答
我使用GDB進行調試的第一種方法是設置斷點。這是這樣做的 -
prompt> gdb ./x_bstree.c
(gdb) #prompt
(gdb) b 123 #break at line 123
(gdb) r #start program
現在你的程序停在你的程序的第123行。現在,您可以使用print
來檢查堆棧或堆中的變量。對於堆棧變量,只需使用print <varname>
。對於堆變量(指針)使用print <*varname>
。不確定檢查堆棧/堆變量有什麼特別的事情嗎?
當然,要調試多線程應用程序,您需要使它在單線程模式下運行&然後dubug否則很難預測發生了什麼。
爲別的存在的gdb &許多網站大量的文檔還提供gdb cheat sheets
嘗試使用ddd
。 ddd manual
好的。也許我稍微說一下。我這樣使用它。
編好的程序編譯與調試符號:
gcc -g program.c -o program
運行ddd
:
ddd program
在GUI中,你可以做各種事情,查看機器代碼,查看內存等。環視四周。 手冊中還有一部分檢查堆棧。 ddd
爲您提供了很好的界面,用於檢查C程序 。
我以爲ddd只是gdb的前端,不是嗎? – 2010-10-06 18:19:25
我發現它比gdb更方便。在gui中,您可以一次查看幾件事情。在gdb中,我一直在回滾。 – 2010-10-06 18:40:14
這只是gdb的前端,請參見[更新的手動位置](http://www.gnu.org/software/ddd/manual/html_mono/ddd.html)。但是,對於某些類型的工作流程而言,它可以比僅用於控制檯的工具更直接。 – starturtle 2016-08-03 12:15:28
您可以用「X」命令轉儲原始內存
所以如果你想看看堆棧位或堆嘗試像
x/10b &stackvar
x/200b &heapvar-20
事情最後一個會告訴你200個字節從heapvar之前的20個字節開始。所以,如果你只是malloced,你可以看到堆頭太
我喜歡你的方法!是否有任何好的gdb插件允許檢查堆顯示它的塊數據,標題,使用位等?我剛剛找到[gdb-heap](https://fedorahosted.org/gdb-heap/)。不幸的是,它看起來很不合時宜,無人維護。 – rc0r 2015-08-25 06:02:46
查看堆棧: gdb> backtrace
查看當前棧幀: gdb> info frame
查看當前堆棧幀的參數: gdb> info args
查看當前堆棧幀的局部變量: gdb> info locals
導航到父堆棧幀: gdb> frame 1
- 1. 如何使用GDB檢查堆棧幀?
- 2. 基於堆棧的迷宮探索
- 3. 使用GDB檢查機器堆棧
- 4. 使用GDB檢查堆棧(x86)
- 5. GDB如何確定堆棧的底部?
- 6. 構建調用堆棧,如gdb所示
- 7. 堆棧搜索導致堆棧溢出
- 8. 堆棧在java中使用堆棧
- 9. 如何使用GDB查看存儲在堆棧上的變量
- 10. 堆棧應該如何使用大對象堆棧?
- 11. Java堆棧搜索
- 12. 可搜索堆棧
- 13. 搜索上堆棧
- 14. 堆棧或堆
- 15. JVM - 堆棧和堆棧
- 16. 希望堆棧堆棧?
- 17. MIPS:使用堆棧
- 18. printf使用堆棧?
- 19. 堆棧使用Pam.d
- 20. ASM堆棧使用
- 21. C++:使用堆棧
- 22. 堆棧使用類
- 23. GDB堆棧跟蹤不完整信息
- 24. 堆棧溢出調用堆棧#timememoryfunctionlocation 10.0000143728
- 25. 深度優先搜索堆棧使用
- 26. 報告對象正在使用堆棧/堆上有多少內存? (GDB)
- 27. OOP和堆/堆棧
- 28. 塊,堆棧和堆
- 29. 使用堆棧來存儲對象
- 30. 使用堆棧來反轉字符串?
你用什麼操作系統? – 2010-10-06 17:11:38
啊,對不起,是的:操作系統:Ubuntu Linux,編譯器:GCC。 – 2010-10-06 17:13:22