如何解决如何在断点上的gdb中运行程序功能?
| 我有一个不断修改的数组。在程序执行完之后,修改并没有完全按照我希望的方式执行,因此我的数组没有达到我想要的方式。我有一个读取数组内容的函数。有没有一种方法可以使用gdb并将断点放置在某个地方,然后运行读取数组内容的函数?我想找出问题出在哪里。 Gdb不允许我运行\“ p readArray()\”。 f我有一个断点。解决方法
每当遇到特定断点时,请使用\“ commands \”来运行命令。例如,要在第一个断点上运行命令:
(gdb)命令1
输入命中断点1的命令,每行一个。
以一行仅表示“结束”的行结束。
>调用readArray()
>结束
您可以使用\“ info break \”来确定您感兴趣的断点的数量。
, 听起来您想要在阵列上设置手表。语法为“ 0”-有关使用带有动态数组的手表的更多信息,请参考此问题(它是C ++,但在C中应该相同)。
, 将breakboint设置在地址处。在malloc或静态创建数组并在地址处设置断点的位置获取数组的地址。
break * addr \“在地址addr处设置断点\”
, “脏”方法是将程序计数器寄存器修改为代码中调用显示功能的位置的地址。请确保在调用之后设置一个断点,这样如果您希望此后代码继续正确运行,则可以将程序计数器恢复到其原始值。
如果函数不带参数,则更脏的是将程序计数器设置为函数中第一条指令的地址。在这种情况下,在return语句上放置一个断点并在那里恢复程序计数器,否则返回将返回到第一个断点的函数的调用者,而这可能不是您想要的。
也就是说,调试器完全能够通过“监视”显示数组内容,因此,除非需要对内容进行特定的解释以使其有意义,否则肯定会是更好的方法吗?
另一个非调试程序的解决方法是将阵列实现为内存映射文件或共享内存,然后使用单独的过程来映射和显示相同的文件或内存。此技术将特定于OS。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。