c - GDB中遇到某个断点时如何执行特定操作?

标签 c gdb

我正在寻找一种在 gdb 中遇到特定断点时执行某些操作的方法。

基本上我的程序中有一些内存泄漏。当 malloc 和 free 函数命中时,我需要进入函数(步骤)并收集一些基本信息,如地址和大小(基本上打印那里的值)。完成后恢复我的程序。

我们有什么好的方法可以做到这一点吗?

最佳答案

例如,这里是您可以如何使用断点命令在 x 为正时在 foo 的入口处打印 x 的值。

break foo if x>0
commands
silent
printf "x is %d\n",x
cont
end

如果您在命令列表中指定的第一个命令是silent,则不会打印关于在断点处停止的通常消息。这对于要打印特定消息然后继续的断点可能是理想的。如果其余命令均未打印任何内容,则您看不到已到达断点的迹象。 silent 仅在断点命令列表的开头才有意义。

断点命令的一个应用是补偿一个错误,以便您可以测试另一个错误。在错误的代码行之后放置一个断点,给它一个条件来检测发生错误的情况,并给它命令为需要它们的任何变量分配正确的值。以 continue 命令结束,这样您的程序就不会停止,并以 silent 命令开始,这样就不会产生任何输出。这是一个例子:

break 403
commands
silent
set x = y + 4
cont
end

关于c - GDB中遇到某个断点时如何执行特定操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6517423/

相关文章:

c - 为什么即使在 C 中的 "clearing"之后我的数组仍然包含垃圾值

c++ - GDB:在转储的整个内存中查找值

linux - 为什么每次我使用 'cont' 命令时,在 gdb 中运行时一个 CTRL-Z 会一直发出 SIGTSTP 信号?

使用 C 创建调试器

gcc - Gdb 在退出作用域时跟踪变量的声明

x86 - gdb信息帧输出: Wrong value for "Arglist at"?

c - 以下 "flag"变量访问在中断和用户代码之间是否安全?

c - 如何选择其中一个选项?

java - 如何在 Android Studio 1.3.2 中包含预构建的 .so 库

c - 我正在尝试对单个链表进行排序