背景

我的代码里只包含了HeapProfilerStart和HeapProfilerStop并没有调用HeapProfilerDump,但是还是会产生heapdump文件,我也不知道是怎么触发的

在 gdb 中给某个函数打上断点是一个常见的调试操作。以下是具体的步骤:

1. 启动 gdb 并加载程序

gdb <executable>

例如,如果你的可执行文件名为 my_program,你可以运行:

或者,如果你要附加到一个正在运行的进程,可以使用以下命令(替换 <PID> 为实际进程 ID):

gdb -p <PID>

2. 设置断点

通过函数名设置断点

你可以直接使用函数的名称设置断点:

break <function_name>

例如,如果你要在名为 my_function 的函数处设置断点:

break my_function

如果你知道函数在源代码中的具体位置(文件名和行号),可以通过这种方式设置断点:

break <file_name>:<line_number>

break main.cpp:42

通过类的成员函数设置断点

对于 C++ 程序中的类成员函数,你可以使用以下格式:

例如,在 MyClass 的成员函数 doSomething 上设置断点:

break MyClass::doSomething

3. 启动或继续程序

run

如果程序已经在运行中,并且你使用 gdb -p <PID> 附加到了进程,可以使用 continue 命令继续程序的执行:

当程序运行到断点所在的地方时,gdb 会暂停执行,并返回到调试器提示符。

4. 查看断点

info breakpoints

5. 删除断点

如果你需要删除某个断点,可以使用以下命令,指定断点的编号(可以通过 info breakpoints 获取):

例如,删除编号为 1 的断点:

delete 1

6. 单步调试和其他调试操作

  • 单步执行:

    step
    
  • 逐行执行:

    next
    
  • 查看调用栈:

    backtrace
    
  • 打印变量值:

    print <variable_name>
    

通过这些步骤,你可以有效地设置并使用断点来调试你的程序。