Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging Strace检测到对brk的调用,但GDB不';不要在断点上停止_Debugging_Gdb_Breakpoints_Strace_Brk - Fatal编程技术网

Debugging Strace检测到对brk的调用,但GDB不';不要在断点上停止

Debugging Strace检测到对brk的调用,但GDB不';不要在断点上停止,debugging,gdb,breakpoints,strace,brk,Debugging,Gdb,Breakpoints,Strace,Brk,我尝试调试内存泄漏已经有相当一段时间了。我的主要问题是不能使用像Valgrind之类的合适工具,所以我选择了普通的GDB+strace 我的程序是一个循环。在每次迭代中,它创建一些对象,然后调用它们的析构函数。如上所述,在循环的第一次迭代中进行第一次分配之后,程序不应该要求更多的内存,因为它总是分配相同的对象,因此应该总是重用相同的空间。然而,我的程序每15次迭代调用一次brk(),传递给brk的参数每次增加4.096(比如,第一次:brk(0xb7887000)=0xb7887000,第二次:

我尝试调试内存泄漏已经有相当一段时间了。我的主要问题是不能使用像Valgrind之类的合适工具,所以我选择了普通的GDB+strace

我的程序是一个循环。在每次迭代中,它创建一些对象,然后调用它们的析构函数。如上所述,在循环的第一次迭代中进行第一次分配之后,程序不应该要求更多的内存,因为它总是分配相同的对象,因此应该总是重用相同的空间。然而,我的程序每15次迭代调用一次
brk()
,传递给
brk
的参数每次增加4.096(比如,第一次:
brk(0xb7887000)=0xb7887000
,第二次:
brk(0xb7888000)=0xb7888000
,第三次:
brk(0xb7889000)=0xb7889000
,等等)

然后我尝试将GDB挂接到我的程序,让程序运行几次迭代,并使用
(GDB)break brk
在brk上设置断点

它说它在一个地址上设置了一个断点,但即使我让我的程序运行了15次以上的迭代,断点也永远不会被“调用”(?)


为什么会这样?如何理解发生了什么?

如果
break brk
实际上是linux系统调用,请尝试
catch syscall brk
而不是
break brk
。您是否尝试了实验性的
strace-k
选项来显示系统调用的堆栈跟踪?您必须自己编译它,但是跟踪内存使用情况非常方便。如果
break brk
实际上是linux系统调用,请尝试
trace-k
选项以显示系统调用的堆栈跟踪,而不是
break brk
?您必须自己编译它,但是跟踪内存使用情况非常方便。