Как использовать watchmalloc для фоновых процессов - PullRequest
1 голос
/ 18 февраля 2012

Я использую Solaris x86 box .Мое приложение аварийно завершает работу со следующей трассировкой стека.

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

Мне нужно отладить его с помощью "watchmalloc".Мое приложение будет запущено системой inetd .Я не могу контролировать его выполнение.Пожалуйста, дайте мне знать, как использовать watchmalloc в этом сценарии.

Я установил следующую переменную среды, она помогает только для процесса, запускаемого из оболочки.

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

Ответы [ 2 ]

2 голосов
/ 18 февраля 2012

Просто замените ваше приложение оболочкой, которая устанавливает необходимые переменные, затем запустите реальное приложение.

Например:

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 голосов
/ 18 февраля 2012

Как насчет переименования вашего приложения, скажем, myapp.bin, и установки небольшого сценария оболочки, например:

!/ bin / sh

LD_PRELOAD = watchmalloc.so.1 MALLCO_DEBUG = WATCH, экспорт RW LD_PRELOAD MALLOC_DEBUG exec myapp.bin "$ @"

...