2008. 4. 6.

Linux Binary Core

LINUX 운영체제에서 코어 정보 수집 LINUX
GDB는 Linux의 기본 디버거로 사용되며 강력하고 안정적입니다. 다양한 비주얼 디버거를 사용할 수도 있지만 코어에서 스택 트레이스를 가져올 경우 간단한 명령줄 디버거면 충분합니다.


file /core를 실행하여 코어 파일의 출처가 Java VM인지 여부를 확인합니다.
Linux에서 알려진 버그를 방지하려면 최신 버전의 GNU GDB를 사용해야 합니다.

참고: http://ftp.gnu.org/gnu/gdb/
또한 Linux에서 코어 파일에 대해 ulimit가 설정되어 있는지 확인합니다 (예: ulimit -c unlimited).
Linux에서는 기본적으로 코어 덤프가 오프되어 있습니다. RedHat Advanced Server 2.1에서는 코어 파일이 /etc/security에 있고 limits.conf라는 파일이 있어야 합니다. 이 파일에서 설정 사항을 확인할 수 있습니다. "core"라는 단어를 찾아보십시오. 0으로 설정되어 있으면 coredump를 사용할 수 없습니다.
참고 항목: 코어 파일 생성을 위해 검사해야 할 운영 체제 구성
다음과 같이 gdb를 사용하여 스택 트레이스를 가져옵니다(이전 과정과 동일).


$ java -version (need to use right version of jdk)
$ ls /usr/local/bin/gdb (need to know gdb location) or "which gdb"
$ export DEBUG_PROG=/usr/local/bin/gdb (or wherever "gdb" is located)

For JDK 1.3.X do the following:
$ /java corefile
For JDK 1.4.X do the following:
$ gdb /java corefile

Now you will be in the debugger. Execute the following commands:
(gdb) where ("shows a summary of the stack")
(gdb) thr ("switch among threads or show the current thread")
(gdb) info thr ("inquire about existing threads")
(gdb) thread apply 1 bt ("apply a command to a list of threads, specifically the backtrace to thread #1")
(gdb) quit


where 명령을 사용하면 실행된 마지막 스레드의 스택 트레이스가 생성되고, thr 명령을 사용하면 현재 스레드가 표시되고, info thr 명령을 사용하면 모든 스레드의 상태가 표시되고, thread apply 1 bt 명령을 사용하면 코어 파일에 포함된 스레드 1의 스택 트레이스를 다른 방식으로 가져올 수 있습니다. 마지막 명령 thread apply # bt에서 #을 실제 스레드 번호로 바꾸어 개별 스레드의 스택 트레이스를 가져오거나 3을 "all"로 바꾸어 모든 스레드의 스택 트레이스를 가져올 수 있습니다.

댓글 없음: