我有一个数组,我不断修改。在我的程序完成后执行我的修改并不完全符合我希望他们做的事情,所以我的数组并没有变成我想要的方式。我有一个读取数组内容的函数。有没有办法使用gdb并在某处放置断点,然后运行读取数组内容的函数?我想找出问题出在哪里。 Gdb不让我运行“p readArray()”。 f我有一个断点。如何在断点处运行gdb中的程序函数?
回答
这听起来像你想要的是在阵列上设置手表。语法是watch <expression>
- 参考this question了解有关使用动态数组的手表的更多信息(它是C++,但在C中应该相同)。
使用“命令”在命中特定断点时运行命令。例如,对第一个断点运行命令:
(gdb) commands 1 Type commands for when breakpoint 1 is hit, one per line. End with a line saying just "end". > call readArray() > end
您可以使用“信息断裂”,以确定您所感兴趣的断点数量
你的GDB fu明显比我的好。我建议的“脏”解决方案适用于无法调用任意函数的调试器,但我想这在这种情况下是不相关的。 – Clifford 2011-06-04 06:46:41
设置breakboint地址。在malloc或静态创建数组的地方获取数组的地址,并在地址处设置断点。
休息*地址
A“脏”的方法“于addr设置断点”是修改程序计数器寄存器到一个位置的地址,你的代码中显示功能是调用。确保在调用之后设置断点,以便您可以将程序计数器恢复为其原始值,如果您希望代码在此后继续正确运行。
即使更脏,如果函数不带参数,也是将程序计数器设置为函数中第一条指令的地址。在这种情况下,在return语句中放置一个断点并在那里恢复程序计数器,否则返回将返回到第一个断点函数的调用者,这可能不是您想要的。这就是说,调试器完全能够通过“watch”显示数组内容,所以除非内容需要特定的解释来理解它,否则这肯定会是一个更好的方法吗?
另一个非调试器解决方法是将数组实现为内存映射文件或共享内存,然后使用单独的进程映射和显示相同的文件或内存。这种技术将是操作系统特定的。
- 1. gdb-stub/server如何处理SW断点?
- 2. 如何使用共享库函数在gdb中设置断点
- 3. 成员函数的C++ GDB断点
- 4. 如何使用gdb中的参数运行程序?
- 5. 如何中断在qemu + gdb中运行的无限循环?
- 6. 如何跳转到gdb中的断点?
- 7. gdb,在文件中的所有函数上设置断点
- 8. GDB在对象函数调用中断
- 9. 通过python接口在gdb的断点处执行命令
- 10. gdb:如何确认函数上设置了断点?
- 11. 如何直接在gdb中运行程序集?
- 12. 如何在gdb中使用其他标志运行程序?
- 13. 如何GDB在运行时
- 14. 程序触发断点;不运行
- 15. 如何在运算符<上使用GDB设置断点?
- 16. GDB如何在没有断点的情况下停止执行?
- 17. 如何使用gdb在特定的正在运行的应用程序的文件中调试函数?
- 18. 如何在constexpr函数中执行运行时断言?
- 19. 在three.js程序中运行webgl函数
- 20. GDB:断点没有命中
- 21. 何处在PyCharm调试器断点处运行脚本?
- 22. 如何在断点处运行代码片段?
- 23. 在gdb中如何在任何有特定单词的行上设置断点?
- 24. 如何在gdb断点的命令中执行和执行更多命令
- 25. 如何判断应用程序在C++中运行的位置
- 26. 在中断处理程序
- 27. gdb:中断正在运行的进程没有终止子进程
- 28. 更改运行中断处理程序的优先级级别?
- 29. pthread_create上的gdb断点
- 30. 使用GDB的断点
嗯..有无论如何使用该功能?它以更有组织的方式打印出信息。 – hut123 2011-06-04 05:11:19