2011-10-12 4 views
7

총 플래시 크기가 180MB 인 ARM9 보드에서 임베디드 응용 프로그램을 실행 중입니다. 나는 gdb을 실행할 수 있어요,하지만 난GDB를 사용하여 코어 덤프 파일을 생성하는 방법을 제한하는 방법

(gdb) generate-core-dump

을 할 때 나는 또한 ulimit -c 50000을 설정하지만 여전히 코어 덤프가이 제한을 초과

warning: Memory read failed for corefile section, 1048576 bytes at 0x4156c000. 
warning: Memory read failed for corefile section, 1048576 bytes at 0x50c00000. 
Saved corefile core.5546 
The program is running. Quit anyway (and detach it)? (y or n) [answered Y; input not from terminal] 
Tamper Detected 
**********OUTSIDE ifelse 0********* 
length validation is failed 

오류가 발생합니다. 파일 크기를 확인하기 위해 ls -l을 수행하면 300MB가 넘습니다. 이 경우 코어 덤프의 크기를 어떻게 제한해야합니까?

답변

8

GDB는 'ulimit -c'를 존중하지 않으며 커널 만 수행합니다.

GDB를 대상 보드에서 실행하는지 아니면 개발 호스트에서 실행하는지 (그리고 대상에서 gdbserver를 사용하는지)는 분명하지 않습니다. 아마도 후자를 사용하여 완전한 코어 덤프를 수집 할 수 있습니다.

잘린 코어 덤프는 어쨌든 문제를 디버그하는 데 필요한 정보를 정확하게 포함하지 않기 때문에 고통 스럽습니다. 쉘 RC-파일에

+0

대상 보드에서 gdb를 실행 중입니다. gdbserver도 사용할 수 있지만 충돌이 쉽게 재현되지 않으므로 첫 번째 옵션을 사용할 것입니다. –

+1

죄송하지만 gdb 또는 gdbserver를 쉽게 재현 할 수있는 크래시와 관련하여 실행하는 방법을 알 수 없습니까? – shodanex

+0

@shodanex - 클라이언트 - 서버 모델을 사용하면 코어 파일에 180MB의 여유 공간 만있는 임베디드 시스템이 아닌 "호스트"파일 시스템에서 코어를 수집 할 수 있습니다. 아마 호스트 시스템은 완전한 HDD를 가지고 훨씬 더 큰 코어 파일을 저장할 수 있습니다. – Peter

0

언제 ulimit -c를 사용 했습니까? 코어 덤프를 생성하고 동일한 세션 내에서 프로그램을 시작하기 전에 사용해야합니다.

+0

GDB를 실행하기 전에 ulimit을 설정했습니다. /etc/rc.d/init.d/startup에 'ulimit -c 50000'을 넣고 'ulimit -a'를 사용하여 수동으로 검사했는데 제대로 설정되었습니다. –

4

:

limit coredumpsize 50000    # or whatever limit size you like 
GDB

포함, 모두를위한 한계를 설정해야합니다

참고 : 0으로 설정하면

것은, 당신이 있는지 확인 할 수 있습니다 홈 디렉토리가 코어 덤프 파일로 복잡하지 않습니다.