如何将watchmalloc用于后台进程

时间:2012-02-18 14:52:03

标签: memory malloc solaris core ld-preload

我正在使用 Solaris x86 box 。我的应用程序因跟踪堆栈跟踪而崩溃。

fed155f9 realfree (816d878) + 97 fed151be _malloc_unlocked (7e0, 8047eac, 8047e3c, feffb7d8, 8047bac, 809dd6a) + 18c fed15008 malloc (7e0) + 34

我需要使用"watchmalloc"进行调试。我的应用程序将由系统 inetd 进程启动。我无法控制它的执行。请告诉我如何在此方案中使用watchmalloc

我设置了以下环境变量,它仅对从shell启动的进程有帮助。

LD_PRELOAD=watchmalloc.so.1 MALLOC_DEBUG=WATCH,RW

2 个答案:

答案 0 :(得分:2)

只需通过设置所需变量的包装器替换您的应用程序,然后启动实际应用程序。

例如:

cd <path to myapp>
mv myapp myapp.real
cat > myapp <<%
#!/bin/ksh
export LD_PRELOAD=watchmalloc.so.1
export MALLOC_DEBUG=RW
exec $(dirname $0)/myapp.real "$@"
%
chmod +x myapp

答案 1 :(得分:0)

如何将您的应用重命名为myapp.bin,并安装一个小的shell脚本,如:

! / bin / sh的

LD_PRELOAD = watchmalloc.so.1 MALLCO_DEBUG = WATCH,RW export LD_PRELOAD MALLOC_DEBUG exec myapp.bin“$ @”