2012-02-18 2 views
1

Solaris x86 상자입니다. 내 응용 프로그램이 다음 스택 추적과 충돌합니다.watchmalloc을 사용하여 backround 프로세스를 수행하는 방법

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 

답변

0

앱의 이름을 바꾸는 약 myapp.bin 말과 같은 작은 쉘 스크립트를 설치할 수 있습니다 무엇 :

!/빈/SH

LD_PRELOAD = watchmalloc.so.1 MALLCO_DEBUG = 시계, RW 수출 LD_PRELOAD의 MALLOC_DEBUG 간부 myapp.bin "$의 @"

+0

감사합니다. 문제를 해결할 수있는 아주 좋은 방법입니다. 내 문제를 해결합니다. 나는 watchmalloc.so.1을 사용할 수있다. – Naga

1

그냥 필요한 변수를 설정하는 래퍼하여 응용 프로그램을 대체 실제 응용 프로그램을 시작하십시오.

예 :

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 "[email protected]" 
% 
chmod +x myapp 
관련 문제