在gdb中使用malloc_stat和malloc_info

涉及知识点:

malloc_statc输出的重定向

gdb中定义指针的值为$__开头的变量

gdb dsl编写的扩展

 

 

define my_malloc
    shell mkdir -p $arg0/log
    shell touch $arg0/log/malloc_info.log
    shell touch $arg0/log/malloc_stats.log

    set $__f = fopen("$arg0/log/malloc_info.log", "w")   # 注意此处,用普通命令的变量不行的,例如$fp承接fopen的返回会报错“Left operand of assignment is not an lvalue.”
    call malloc_info(0, $__f)
    call fclose($__f)

    call close(2)     # 由于malloc_stats默认就打印到进程的标准出错,所以把标准出错的描述符关了
    call open("$arg0/log/malloc_stats.log",2)            # 此处重新打开了一个文件,由于默认会用最小的描述符,所以就是标准出错的2
    call malloc_stats()         
    call close(2)
end

  

使用方式:(ps,我将上述的代码放到了文件中,并且在gdbinit文件中source了一下,所以下面我就可以直接用了)

(gdb) my_malloc /home/lynalee 

posted @ 2022-08-02 15:57  lynalee  阅读(962)  评论(0编辑  收藏  举报