我正在寻找一种方法,当gdb中出现一个特定的断点时,可以采取一些行动.

基本上我的程序里有一些记忆缺陷.当malloc和free函数命中时,我需要进入函数(步骤)并收集一些基本信息,如地址和大小(基本上打印这些值).一旦完成,继续我的程序.

我们有什么好办法吗?

推荐答案

例如,下面介绍了如何使用断点命令在x为正数时将x的入口值打印到foo.

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

如果在命令列表中指定的第一个命令是silent,则不会打印关于在断点处停止的常见消息.对于要打印特定消息然后继续的断点,这可能是可取的.如果剩下的命令都没有打印任何内容,那么就看不到到达断点的迹象.只有在断点命令列表的开头,"静默"才有意义.

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

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

C++相关问答推荐

va_arg -Linux和Windows上的不同行为

AVX-512 BF 16:直接加载bf 16值,而不是从fp 32转换

数组元素的编号索引

在Windows上构建无聊的SSL x64

malloc实现:判断正确的分配对齐

在C中使用强制转换将uint16_t转换为uint8_t [2]是否有效?

getchar读css + z还是返回css?

两个连续的语句是否按顺序排列?

为什么内核使用扩展到前后相同的宏定义?

如何使fputs功能提示错误输入并要求用户重新输入.程序停止而不是请求新的输入

C由四个8位整数组成无符号32位整数

如何计算打印二叉搜索树时每行所需的空间?

强制转换变量以在 struct 中蚕食

如何将另一个数组添加到集合中,特别是字符串?

通过k&;r语法的c声明无效

c程序,让用户输入两类数字,并给出输出用户输入多少个数字

Matlab/Octave对conv2函数使用哪种方法?

UpDown控制与预期相反

如何不断地用C读取文件?

为什么创建局部变量的指针需要过程在堆栈上分配空间?