我目前不得不编写malloc()和free()的实现,并且给出了一个将运行我的两个实现的驱动程序。
但是目前,我是segfaulting,因为free()试图释放数十亿字节(这是错误的)有效载荷大小。我有运行GDB的行号和行号,但是我需要知道malloc()和free()是否被多次调用,以确认确实存在至少一个的情况运行顺利。
答案 0 :(得分:10)
首先为malloc和free设置断点。然后使用具有高值的“ignore”命令来抑制在这些断点处真正停止。 GDB仍将计算断点被击中的次数。当您调用“info breakpoints”时,GDB会向您显示这些计数。
答案 1 :(得分:5)
只需完成Martin的信息,运行gdb,然后在gdb提示符下运行:
b <file:line_number or function name>
ignore <breakpoint identifier> 100000
然后你运行你的可执行文件(或你恢复),然后,当你想在gdb提示符上检查断点被击中的次数时:
info breakpoints
答案 2 :(得分:0)
这是条件断点的一个很好的用例,您可以过滤掉超出大小阈值的调用。使用vertices$size[vertices$size==0] <- sub(".*\\.", "", vertices$name[vertices$size==0])
中的if (condition)
子句。
linux上的另一个选择是使用break
来设置探测和捕获参数。有关详细信息,请参阅perf
。这使您可以非侵入地检测二进制文件并跟踪所有调用。 perf probe
适用于输出结果。
答案 3 :(得分:-2)
(gdb)帮助打破了
在指定的行或功能处设置断点
break [LOCATION] [thread THREADNUM] [if CONDITION]
LOCATION可以是行号,功能名称或“*”和地址
如果指定了行号,则在该行的代码开头处中断
如果指定了某个函数,则在该函数的代码开头处中断
如果指定了地址,请在该确切地址处中断
如果没有LOCATION,则使用所选堆栈帧的当前执行地址
这对于在返回堆栈帧时中断非常有用。