[질문] pthread와 -static 옵션.....

partout의 이미지

아래와 같이 더미 쓰레드를 띄우는 간단한 프로그램을 작성하고서,
-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/thread

Program 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 : 0

Program 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]$

답변 부탁드립니다.

partout의 이미지

RedHat 8.0에서도 똑같네요..

도대체 원인이 뭘까요?

어찌나 졸린지..~~

whatisit의 이미지

: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

yykim의 이미지

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 입니다.

partout의 이미지

아래는 RedHat 7.3에서 테스트 한 겁니다..

Quote:
[partout@hacking2 test]$ gcc -o thread thread.c -g -lpthread -static
[partout@hacking2 test]$ ./thread
status : 0
[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

Program received signal SIG32, Real-time event 32.
0x0804e716 in sigsuspend ()

(gdb) inside dummy

(gdb)

어찌나 졸린지..~~

낙엽의 이미지

redhat 7.1에서 테스트입니다.

Quote:
[fallleaf@ftp_server thread]$ gcc -o thread test.c -g -lpthread -static
[fallleaf@ftp_server thread]$ ./thread
inside dummy
status : 0
[fallleaf@ftp_server thread]$ gdb thread
GNU gdb 5.0rh-5 Red Hat Linux 7.1
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"...
(gdb) r
Starting program: /home/fallleaf/sample/test/thread/thread
[New Thread 1024 (LWP 6775)]
[New Thread 2049 (LWP 6778)]
Delayed SIGSTOP caught for LWP 6778.
[New Thread 1026 (LWP 6779)]
Delayed SIGSTOP caught for LWP 6779.
inside dummy
status : 0
LWP 6779 exited.
LWP 6778 exited.

Program exited normally.
(gdb)

partout의 이미지

RedHat 8.0에서 -g 옵션을 주고서 테스트한 것입니다.

Quote:

[partout@partout-vmware partout]$ gcc -o thread thread.c -g -lpthread -static
[partout@partout-vmware partout]$ gdb thread
GNU gdb Red Hat Linux (5.2.1-4)
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/thread

Program received signal SIG32, Real-time event 32.
0x0804e3a6 in sigsuspend ()

(gdb) inside dummy

어찌나 졸린지..~~

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.