我的C应用程序使用第三个库,它们进行自己的内存管理.为了保持健壮,我的应用程序具有代码来处理由于缺少可用内存而导致的库函数故障.
我想测试这段代码,为此,我需要模拟由于内存不足而导致的故障.
推荐使用什么工具?我的环境是Linux/gcc.
您可以使用ulimit
来限制用户可以使用的资源量,包括内存.所以你创建了一个测试用户,将他们的内存使用限制到足以启动你的程序的东西,然后看着它死掉:)
例:
ulimit -m 64
设置内存限制为64kb.
创建自己的malloc包装器,它将随机返回null而不是有效指针.好吧,或者如果你想进行单元测试,它会一直失败.
在过度使用内存的操作系统(例如,Linux或Windows)上,根本无法处理内存不足错误.malloc可能会返回一个有效的指针,稍后,当您尝试取消引用它时,您的操作系统可能会确定您的内存不足并终止该进程.
http://www.reddit.com/comments/60vys/how_not_to_write_a_shared_library/是一个很好的写作.
您可以使用与第三方库相同的界面编写自己的模拟库,而不是它.您还可以使用LD_PRELOAD覆盖第三方库的选定功能.