멀티프로세스 를 gdb 로 디버깅하려면??

psjHello의 이미지

GDB 메뉴얼 등을 읽어보긴 했지만, 잘 모르겠습니다.

fork() 로 자식 프로세스를 만든 프로그램을 gdb 로 디버깅하는
방법이 너무 궁금하네요.
:oops:

jaeswith의 이미지

작년에 삽질 했던 부분이라서 약간의 도움이 될까 남겨봅니다.

a.out 이 fork 를 해서 수행이 된다고 했을때...

$ ps aux
...
1234 ... a.out
1236 ... a.out
$

였을때, 원래 프로세스가 1234 이고 fork 가 된 프로세스가 1236 이면...

$ gdb a.out 1236

인지

$ gdb 1236 a.out

인지를 하면, 수행중인 프로세스에서 debugging 이 됩니다.

as simple as possible
Jae-wan Jang
http://camars.kaist.ac.kr/~jwjang

ihavnoid의 이미지

jaeswith wrote:
작년에 삽질 했던 부분이라서 약간의 도움이 될까 남겨봅니다.

a.out 이 fork 를 해서 수행이 된다고 했을때...

$ ps aux
...
1234 ... a.out
1236 ... a.out
$

였을때, 원래 프로세스가 1234 이고 fork 가 된 프로세스가 1236 이면...

$ gdb a.out 1236

인지

$ gdb 1236 a.out

인지를 하면, 수행중인 프로세스에서 debugging 이 됩니다.

gdb a.out 1236 이 맞습니다.

Consider the ravens: for they neither sow nor reap; which neither have storehouse nor barn; and God feedeth them: how much more are ye better than the fowls?
Luke 12:24

psjHello의 이미지

현재 부모프로세스를 디버깅하고 있는
gdb) 外 에, 새로운 터미널창에서
새로운 gdb) 를 띄워서 작업하는 겁니까?

아니면, 부모프로세스를 디버깅하고 있는
그 gdb) 실행창에

:attach PID

를 써넣는 겁니까???

밑에 있는 방법으로 하니까,
'퍼미션' 에러가 나고,

위에 있는 방법으로 하니까,
자식-프로세스로 시점(視占) 이 바뀌지가 않네요.

아아... 어렵네요.. 8-P

jaeswith의 이미지

예전일이라, 잘 기억은 안나지만...

psjHello wrote:
현재 부모프로세스를 디버깅하고 있는
gdb) 外 에, 새로운 터미널창에서
새로운 gdb) 를 띄워서 작업하는 겁니까?

네, 전 새로운 터미널에서 작업을 했던걸로 기억합니다.

psjHello wrote:

아니면, 부모프로세스를 디버깅하고 있는
그 gdb) 실행창에

:attach PID

를 써넣는 겁니까???

밑에 있는 방법으로 하니까,
'퍼미션' 에러가 나고,

위에 있는 방법으로 하니까,
자식-프로세스로 시점(視占) 이 바뀌지가 않네요.

아아... 어렵네요.. 8-P

Ctrl+C 로 자식 프로세스를 gdb 수행중에 중지시킨다음에 디버깅하기도 했었고요.
아니면, breakpoint 를 부모 프로세스에서 자식 프로세스의 코드에 걸어놓고 디버깅했는거 같기도 한데... 기억이 잘 ㅡㅡ;;

다른 고수님들이 대답해 주실것 같네요.

as simple as possible
Jae-wan Jang
http://camars.kaist.ac.kr/~jwjang

shkwon81의 이미지

보통 멀티 프로세스 디버깅 (부모가 자식을 fork() 하는데 자식 프로세스를 디버깅하고 싶은 경우를 가정)
시에는 다음과 같은 꽁수를 쓰기도 합니다. 말이 좀 이상하네요 -_-
사실 이래 써도 불편하긴 매한가지지만.. 말 그대로 꼭 필요한 경우의 꽁수입니다.

DEBUG 등과 같은 전처리기 지시자를 사용하여.. DEBUG가 정의된 경우에는
자식 프로세스가 시작하자 마자 적정한 시간 (예를 들어.. 10초라고 합시다..) 동안 잠들게 하는 것입니다.

그리고, 앞서 다른 분들이 설명해 주신 것처럼..

gdb a.out 1236

과 같은 식으로 10초 내에 재빨리(-_-) gdb에 프로세스를 attach 하는 것이죠..

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.