한컴 리눅스, memory leak 체크....에 대해..

sore의 이미지

갑작스레 리눅스 환경에서 프로그래밍을 하려니 힘드네요. ㅠ.ㅠ

1. 현재 한컴리눅스를 쓰고 있습니다.
그런데, 컴파일을 3.0에서 하면 실행파일 용량이 2M정도가 나오는데 3.1 에서 컴파일을 하면 3M가 넘어갑니다.
Xlib 를 사용했습니다.
소스는 건드린 곳 없이 그냥 컴파일을 했었는데.. 그럴 수도 있습니까?
어떤 이유라도...

2. 메모리 누수가 생기는지를 알고싶은데..
VC++에서는 실행이 끝나면 output 창에 메모리 릭이 나는지 안나는지 나타나고, 바운드 체커같은 프로그램으로 어디서 메모리 누수가 생기는지를 알 수 있는데..
리눅스에서는 그런 것들을 어떻게 알 수 있는지요?
찾아봤는데.. memprof 라는 것이 있더군요. 그런데 이건 gnome에서만 사용할 수 있다고 하는데. 한컴 리눅스는 KDE 를 쓰더군요..
gnome을 깔아서 써야 하나요, 아니면 다른 방법이... ?

3. gdb를 이용하면 그냥 실행할때보다 더 안정적으로? 잘 돌아가던데. (보통때는 segmentation fault가 자주 생기기 땜시.. ) 그 이유는 뭔지....
gdb 는 오류 찾기에 적당하지 않은 것이라면 어떻게 하면 segmentation fault가 생기는 이유를 찾아낼 수 있는 건지...

답변 부탁드립니다....

verotas의 이미지

sore wrote:
갑작스레 리눅스 환경에서 프로그래밍을 하려니 힘드네요. ㅠ.ㅠ

책을 먼저 하나 사서 보세요. wrox 에서 나온 Beginning Linux Programming 이라는 책이 쓸만합니다. 책 제목에서 풍기는 인상하고는 조금 달리, 다른 플랫폼(윈도 포함)에서 주로 프로그래밍하시던 분들이 리눅스 세계로 건너와 개발하는데 필요한 것들을 상세하게 잘 다루고 있습니다.

Quote:

1. 현재 한컴리눅스를 쓰고 있습니다.
그런데, 컴파일을 3.0에서 하면 실행파일 용량이 2M정도가 나오는데 3.1 에서 컴파일을 하면 3M가 넘어갑니다.
Xlib 를 사용했습니다.
소스는 건드린 곳 없이 그냥 컴파일을 했었는데.. 그럴 수도 있습니까?
어떤 이유라도...

한컴리눅스는 안 써봐서 잘은 모르지만, 프로그램 한 두개 바뀐 것도 아니고 배포판 자체가 바뀌면 컴파일 잘 되던게 안된다거나 거꾸로라고 해도 저라면 하나도 놀라지 않겠습니다. 그냥 쉽게, 배포판이 다르면 서로 다른 OS이고, 배포판 버전이 조금 바뀌면 다른 OS에서 메이저 업그레이드된 것 정도 차이가 있다고 생각하시면 비슷합니다. 앞으로는 좀 나아질지 모르지만 어쨌건 아직까진 그렇습니다. 소위 '국산' 배포판들은 버전이나 릴리스 관리가 상대적으로 조금 더 허술한 측면도 있구요.

Quote:

2. 메모리 누수가 생기는지를 알고싶은데..
VC++에서는 실행이 끝나면 output 창에 메모리 릭이 나는지 안나는지 나타나고, 바운드 체커같은 프로그램으로 어디서 메모리 누수가 생기는지를 알 수 있는데..
리눅스에서는 그런 것들을 어떻게 알 수 있는지요?
찾아봤는데.. memprof 라는 것이 있더군요. 그런데 이건 gnome에서만 사용할 수 있다고 하는데. 한컴 리눅스는 KDE 를 쓰더군요..
gnome을 깔아서 써야 하나요, 아니면 다른 방법이... ?

Electric Fence 를 한번 써보세요.

http://freshmeat.net/projects/efence/

Quote:

3. gdb를 이용하면 그냥 실행할때보다 더 안정적으로? 잘 돌아가던데. (보통때는 segmentation fault가 자주 생기기 땜시.. ) 그 이유는 뭔지....
gdb 는 오류 찾기에 적당하지 않은 것이라면 어떻게 하면 segmentation fault가 생기는 이유를 찾아낼 수 있는 건지...

답변 부탁드립니다....

gdb를 이용해서 실행하면 해당 프로그램 수행 과정을 쫓아가기 위해 gdb가 그 프로그램을 child process로 만들어서 돌리게 됩니다. 따라서 메모리 관련해서는 여러가지 다양한 변화가 생길 가능성이 크죠. gdb로 찾기 힘든 segfault 라면 소위 '내공'으로 때우는 방법 밖에 없을 듯 합니다. :-)

일단은 gdb에 올리지 말고 segfault 날 때 까지 돌리고, 만들어진 core 파일을 gdb로 분석해보는게 정석이라고 봅니다. (gdb 사용법도 위에 언급한 책에 '급하게 써야할 때 꼭 알아야 하는' 수준으로 잘 정리돼 있습니다.)

The good is the enemy of the best.

pynoos의 이미지

Linux의 GNUC Library에는 간단한 memory heap checker 기능이 들어 있습니다.

환경변수 MALLOC_CHECK_ 에 값을 1, 2로 넣어 주시면 되지요.

$ export MALLOC_CHECK_
$ MALLOC_CHECK=2

이렇게 하신뒤에

기능은 프로그램을 실행하면, leak은 찾을수 없지만, 잘못된 메모리를 해제하는 것은 찾을수 있습니다.

쓰고보니 원하는 기능이 아닐수도 있겠군요.

댓글 달기

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