回答
我使用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如何确定堆栈的底部?
- 5. 堆栈搜索导致堆栈溢出
- 6. 如何使用GDB查看存储在堆栈上的变量
- 7. 堆栈应该如何使用大对象堆栈?
- 8. 堆栈或堆
- 9. JVM - 堆栈和堆栈
- 10. 希望堆栈堆栈?
- 11. C++:使用堆栈
- 12. 堆栈使用类
- 13. ASM堆栈使用
- 14. 堆栈使用Pam.d
- 15. MIPS:使用堆栈
- 16. GDB堆栈跟踪不完整信息
- 17. 字符堆栈,字符串堆栈,整数堆栈,整数数组堆栈等
- 18. 在堆栈中搜索
- 19. 索引混淆堆栈LIFO
- 20. 如何使用堆栈格式化xml?
- 21. 数组如何在Java中使用堆栈和堆空间?
- 22. 堆栈
- 23. 堆栈
- 24. 当SIGSEGV使用gdb时无法获取堆栈跟踪
- 25. 使用GDB检查堆栈。什么是x/[n] [x] $ [reg]?
- 26. GDB损坏的堆栈帧 - 如何调试?
- 27. 如何从跟踪点获取堆栈回溯? (GDB)
- 28. 关于堆栈和堆栈内存使用的问题
- 29. 使用getcontext/setcontext切换堆栈/向下堆栈
- 30. 使用dwarf2获取堆栈指针的堆栈指针值
你用什么操作系统? – 2010-10-06 17:11:38
啊,对不起,是的:操作系统:Ubuntu Linux,编译器:GCC。 – 2010-10-06 17:13:22