我正在运行一个 bash 脚本,该脚本运行多个具有不同输入的小应用程序。其中一些应用程序有错误(例如,从未完成),因此我使用 ulimit 获取所有应用程序的输出或错误。
在“伪 bash”中是这样的:
for app in $( find apps ); do
for input in $( find inputs ); do
(
ulimit -Sf 150 -St 1 -Sd 1024 -Sv 51200
app < input
)
# handle output
done
done
这对于大多数应用程序和输入(超过 1000 次测试)都很有效,但是具有某些输入(始终相同)的某些应用程序会出现问题并冻结脚本。
我已经手动测试过,发现冻结的进程有问题(分段错误)。但这是应该发生的。我使用 ulimit 就是为了得到错误并继续前进。
错误信息示例:
*** glibc detected *** <app name>: malloc(): memory corruption (fast) 0x00000000022de2f1 ***
。
*** glibc detected *** <app name>: corrupted double-linked list: 0x0000000001cc3120 ***
。
*** glibc detected *** <app name>: free(): invalid size: 0x00000000017daf20 ***
我在不同的机器、gcc 版本和 linux 版本上尝试过。虽然在不同的应用程序和输入对中,但还是出现了重复。
我该如何找出问题所在并解决它?还是我做错了什么?