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

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

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

若要调用原libc中的同名函数,需使用动态链接器提供的dlsym函数结合标志RTLD_NEXT。RTLD_NEXT指示dlsym在当前共享库之后的搜索路径中查找符号。dlsym是动态链接库(libdl)提供的函数,用于在运行时从共享库中查找符号(函数或变量)的地址。

以上我都没有做过,放个嘴炮而已。Linux大家都知道,王志东RichWin就未必了。

AppInit_DLLs是Windows系统中的注册表配置项,位于HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows。当任何用户模式进程启动时,系统加载器(loader)会先自动加载 AppInit_DLLs中指定的DLL(按顺序加载),这些DLL会被注入到所有新启动的进程中。

微软可不像gcc给提供个-finstrument-functions,《Undocumented DOS/Windows》是两本书,讲文档里没有的东西,等我看到书的时候,只能watch别人的dust了。(红警里美军导弹车台词:Watch my dust!)

对红客我是不明觉厉,景仰佩服地,但是Windows 3.2中文版一出,中文平台都不见了。

哪天gcc出个像MFC的DEBUG_NEW,或者多个-user-defined-new,或者工程一开始就通过条件编译可以换new,fastgrind就更没意思了。申请块要像commit一样写段话。:-)

不知它是否提供这个:一个后台服务,可以通过Web前端界面查看所有内存块的大小、地址、内容和申请时间,可以强行free块。:-)

AddressSanitizer (ASan) 是由Google开发的内存错误检测工具

我上大学时老师还讲如何在VT100终端上移动光标;算法和数据结构是一门课。

搞不动算法后,做界面很能消磨时间,我正在学CSS.


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

image

posted @ 2025-10-31 22:58  华容道专家  阅读(23)  评论(0)    收藏  举报