fastgrind不过如此

fastgrind不过如此

博客园的编辑推荐了《一个轻量级C++内存监控及可视化开源库》,下载试了试。

(一)作者忘记#include <array>,编译通不过。

(二)手动插桩 (instrument) 防不了段错误:

/home/user/fastgrind-main/demo/manual_instrument/simple_demo/main.cpp:52:18: warning: array subscript 1000000 is outside array bounds of ‘int [100]’ [-Warray-bounds]
52 |         b[1000000] = 0x55aa;
|         ~~~~~~~~~^
/home/user/fastgrind-main/demo/manual_instrument/simple_demo/main.cpp:50:29: note: at offset 4000000 into object of size 400 allocated by ‘operator new []’
50 |         int *a = new int[100];
|                             ^int *a = new int[100];
int* b = a;
b[1000000] = 0x55aa;

gcc挺厉害啊。不防段错误,那我也做过类似的东西啊,他这个无非是更产品化,stack frame信息获取的更全而已。

(三)自动插桩靠-finstrument-functions

gcc -finstrument-functions 是 GCC 编译器的一个调试和分析选项,用于在程序中插入函数调用跟踪代码,从而监控函数的调用和返回行为。启用该选项后,编译器会在每个函数的入口和出口处自动插入额外的代码,调用用户定义的钩子函数(hook functions),方便开发者追踪函数调用流程、统计调用次数、分析执行路径等。

AI还说:可以通过LD_LIBRARY_PATH截获对malloc和new的调用。原理是利用动态链接的 “符号优先级”:通过LD_LIBRARY_PATH让程序优先加载一个自定义的共享库,该库中实现与 malloc/new 同名的函数,从而覆盖系统库(如 libc.so)中的默认实现。LD_LIBRARY_PATH是Linux系统中的一个环境变量,用于指定动态链接器(ld.so)在加载共享库(.so 文件)时的额外搜索路径。

以上我都没有做过,放个嘴炮而已。


抄,那不是截图更方便吗?:-) AI还说:

image