如何用gdb在一个文件的全部函数上打断点?

如何用gdb在一个文件的全部函数上打断点?

 
1389Vstux8d0DBXpprTpWzPQo8yEora3knWIqk2MNoiGyS5ocMI
如何用gdb在一个文件的全部函数上打断点?
有的时候,想理清一个模块代码的执行顺序, 想要在该模块的每一个函数上打断点. 如果从源码中寻找每一个函数,在gdb里面打断点, 效率非常低下, 经过研究, 摸索出下面的方法.

1) 第一步, 编译源码为.o
这里以Doug Lea's malloc.c源码为例说明
malloc.c的源码下载:
http://gee.cs.oswego.edu/pub/misc/malloc.c
http://gee.cs.oswego.edu/pub/misc/malloc.h
  
2) 通过nm查看导出的全部函数符号, 然后把符号用\|连接起来
nm malloc.o | c++filt | grep -w -i T | awk '{print $3}' | tr '\n' ',' | sed 's/,/\\|/g'
结果如下:
add_segment\|bulk_free\|calloc\|change_mparam\|dispose_chunk\|free\|has_segment_link\|ialloc\|independent_calloc\|independent_comalloc\|init_bins\|init_mparams\|init_top\|internal_bulk_free\|internal_mallinfo\|internal_malloc_stats\|internal_memalign\|mallinfo\|malloc\|malloc_footprint\|malloc_footprint_limit\|malloc_max_footprint\|malloc_set_footprint_limit\|malloc_stats\|malloc_trim\|malloc_usable_size\|mallopt\|memalign\|mmap_alloc\|mmap_resize\|posix_memalign\|prepend_alloc\|pvalloc\|realloc\|realloc_in_place\|release_unused_segments\|segment_holding\|sys_alloc\|sys_trim\|tmalloc_large\|tmalloc_small\|try_realloc_chunk\|valloc\|
3) 进入gdb 调试你的程序, 执行下面命令
rb 上面的用\|串接起来的符号串
rb add_segment\|bulk_free\|calloc\|change_mparam\|dispose_chunk\|free\|has_segment_link\|ialloc\|independent_calloc\|independent_comalloc\|init_bins\|init_mparams\|init_top\|internal_bulk_free\|internal_mallinfo\|internal_malloc_stats\|internal_memalign\|mallinfo\|malloc\|malloc_footprint\|malloc_footprint_limit\|malloc_max_footprint\|malloc_set_footprint_limit\|malloc_stats\|malloc_trim\|malloc_usable_size\|mallopt\|memalign\|mmap_alloc\|mmap_resize\|posix_memalign\|prepend_alloc\|pvalloc\|realloc\|realloc_in_place\|release_unused_segments\|segment_holding\|sys_alloc\|sys_trim\|tmalloc_large\|tmalloc_small\|try_realloc_chunk\|valloc
说明: rb是使用正则的方式在所有匹配的符号上批量打断点.
效果如下: 本人很满意
1389Vstux8d0DBXpprTpWzPQo8yEora3knWIqk2MNoiGyS5ocMI
标签: gdb 打断点 批量

你可能感兴趣的:(gdb,断点,批量,打断点)