如何使用watchmalloc进行后台进程

问题描述 投票:0回答:2

我正在使用 Solaris x86 盒子。我的应用程序崩溃并显示以下堆栈跟踪。

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
memory malloc solaris ld-preload
2个回答
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

0
投票

将您的应用程序重命名为 myapp.bin,然后安装一个小型 shell 脚本,例如:

! /bin/sh

LD_PRELOAD=watchmalloc.so.1 MALLCO_DEBUG=手表,RW 导出 LD_PRELOAD MALLOC_DEBUG 执行myapp.bin“$@”

© www.soinside.com 2019 - 2024. All rights reserved.