[질문] pthread와 -static 옵션.....
글쓴이: partout / 작성시간: 금, 2003/04/11 - 3:16오후
아래와 같이 더미 쓰레드를 띄우는 간단한 프로그램을 작성하고서,
-static 옵션을 주고서 컴파일한 경우에 gdb로 디버깅을 제대로 수행할 수
없었습니다.
#include <stdio.h> #include <pthread.h> void * dummy(void* arg) { fprintf(stderr, "inside dummy\n"); return NULL; } int main(void) { int n; pthread_t d; int status; status = pthread_create(&d, NULL, dummy, NULL); fprintf(stderr, "status : %d\n", status); return 0; }
아래가 -static 옵션을 주고서 컴파일 한 경우에.. 디버깅 화면을 캡쳐한 것입니다.
Quote:
[partout@hacking2 test]$ gcc -o thread thread.c -lpthread -static
[partout@hacking2 test]$ gdb thread
GNU gdb Red Hat Linux (5.1.90CVS-5)
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux"...
(gdb) run
Starting program: /home/partout/test/threadProgram received signal SIG32, Real-time event 32.
0x0804e716 in sigsuspend ()
(gdb) inside dummy
아래는 코드는 전혀 수정하지 않은 채로 -static 옵션만을 빼고서 컴파일한 후의 디버깅 화면입니다.
Quote:
[partout@hacking2 test]$ gcc -o thread thread.c -lpthread
[partout@hacking2 test]$ gdb thread
GNU gdb Red Hat Linux (5.1.90CVS-5)
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux"...
(gdb) run
Starting program: /home/partout/test/thread
[New Thread 1024 (LWP 25425)]
[New Thread 2049 (LWP 25426)]
[New Thread 1026 (LWP 25427)]
inside dummy
status : 0Program exited normally.
(gdb)
위에서 보듯이 -static 옵션을 준 경우에
프로그램이 SIG32 시그널을 받았다는 알 수 없는 메시지를 출력하고는...
디버깅을 더 이상 진행할 수가 없었습니다.
pthread 구현이나 gdb 쪽 버그인 것 같은데... 사실 전 잘 모르겠네요. ㅠㅠ
RedHat 7.3에서 컴파일해서 테스트한 거구요...
시스템 환경은 대충 이렇습니다.
Quote:
[partout@hacking2 test]$ rpm -qa | grep glibc
glibc-2.2.5-34
glibc-devel-2.2.5-34
glibc-common-2.2.5-34
compat-glibc-6.2-2.1.3.2
glibc-kernheaders-2.4-7.14
[partout@hacking2 test]$ rpm -qa | grep gcc
gcc-objc-2.96-110
gcc-2.96-110
gcc-c++-2.96-110
gcc-g77-2.96-110
[partout@hacking2 test]$ rpm -qa | grep gdb
gdbm-1.8.0-14
gdbm-devel-1.8.0-14
gdb-5.1.90CVS-5
[partout@hacking2 test]$
답변 부탁드립니다.
Forums:
RedHat 8.0에서도 똑같네요..도대체 원인이 뭘까요?
RedHat 8.0에서도 똑같네요..
도대체 원인이 뭘까요?
어찌나 졸린지..~~
:D gcc에서 컴파일 할때 -g 옵션을 주지 않아서 그런것 아닐
:D
gcc에서 컴파일 할때 -g 옵션을 주지 않아서 그런것 아닐까요?
#include <stdio.h>
int main(int argc, char **argv)
{
char szString[] = {0xbc, 0xb1, 0xbf, 0xb5, 0xbe, 0xc6, 0x21, 0x21, 0x20, 0xbb, 0xe7, 0xb6, 0xfb, 0xc7, 0xd8, 0x21, 0x21, 0x0d, 0x0a, 0x00};
printf(szString);
return
gcc -o thr thr.c -static -g -lpthreadg
gcc -o thr thr.c -static -g -lpthread
gdb ./thr
GNU gdb Red Hat Linux 7.x (5.0rh-15) (MI_OUT)
Copyright 2001 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux"...r
(gdb) r
Starting program: /hanmail/60/tmp/./thr
[New Thread 1024 (LWP 7652)]
[New Thread 2049 (LWP 7662)]
[New Thread 1026 (LWP 7663)]
inside dummy
status : 0
Program exited normally.
(gdb)
레드햇 7.2 입니다.
아래는 RedHat 7.3에서 테스트 한 겁니다..[quote][
아래는 RedHat 7.3에서 테스트 한 겁니다..
어찌나 졸린지..~~
redhat 7.1에서 테스트입니다.[quote][fallleaf
redhat 7.1에서 테스트입니다.
RedHat 8.0에서 테스트한 것입니다.
RedHat 8.0에서 -g 옵션을 주고서 테스트한 것입니다.
어찌나 졸린지..~~
댓글 달기