세그멘테이션 폴트 잡는 노하우 좀 알려주세요.

yhjj777의 이미지

-_-;; 코드상의 문제였습니다.. 데이타 오버 플로우였네요.

서지훈의 이미지

gdb를 이요해 보세요.
처음엔 어려워 보일지 몰라도 debugging에는 왓따입니다.
정말 이런 기능도 있나 싶을 기능들이 있어서 좋죠...

그냥... 단편적인 변수 출력하는 기능뿐만 아니라 좀 더 깊이 한 번 보시길...

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

sajacall82의 이미지

printf문요,,,,
저는 매크로로 만들어서 이상한 부분에 삽입시켜 봅니다.

순간을 지배하는 사람이 인생을 지배한다.

정태영의 이미지

gdb로 백트레이스 =333

-g옵션주고 core던져주면 세그폴트난 지점이 나오기도 하죠 ;D

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

cinsk의 이미지

$ cc buggy.c -lefence
$ gdb a.out
(gdb) run
(gdb) bt
(gdb) quit
$ _
aeronova의 이미지

일단 디버거로 세그폴트난 지점을 잡고 그 이후엔 과연 그 지점 근처에서 뭐가 잘못되었나 곰곰히 생각해보기
=> 제가 쓰는 방법인데 이것보다 더 좋은 방법 없나요?

It's better to burn out than to fade away. -- Kurt Cobain.

ㅡ,.ㅡ;;의 이미지

제가해본 가장 절대적인 디버깅...

소스지우기..

언제던가.. 한번은 main() 과 return 문빼고 다지운적도 있다는..


----------------------------------------------------------------------------

metalwolf의 이미지

printf 와 gdb를 병행하십시오.

극소수로 메모리 오버플루로우가 발생하면 스택이 깨질 수 있습니다.

그러면 bt로 볼수 없죠... 처음엔 당연히 bt로 확인하시는게 낳으실 거고

스택 깨지면 답 없습니다. printf로 무식하게 찍으십시오.

^____^; 방가여

sharefeel의 이미지

mpatrol 나 valgrind와 같은 메모리 디버거를 사용하면
어느 지점에서 오버플로우나 잘못된 주소의 참조가 일어 나는지 찾는데 도움을 얻을 수 있습니다.

===============
Vas Rel Por

saxboy의 이미지

가능하면 메모리 디버거를 사용하시는 것이 좋습니다. printf와 gdb 만으로 찾아다니면 "발생한 현상"이 아닌 숨어있는 -- 당장 현재 환경에서는 잘 작동하지만 모듈을 추가하거나 다른 시스템에서 컴파일했을 때 문제가 생겨도 이상할 것이 없는 잘못들을 찾아내기가 어렵습니다. 웬만큼 메모리와 버퍼 크기를 다루는 데에 이골이 난 경우라 아니라면 문제가 되는 코드를 보면서도 깨닫지 못하는 경우가 대부분입니다.
반면 메모리 디버거를 사용하면 일부러 printf를 사용해서 탐색범위를 줄여나가는 귀찮을 일을 할 필요가 없이 잘못된 위치를 바로 찾아주기 때문에 + 잠재적으로 문제의 가능성이 있는 위치를 근본적으로 찾아주기 때문에 좋습니다.
아무리 전문가이고 경험이 많아도 포인터와 스트링 함수를 많이 사용해 작성한 코드에서 문제가 없다고 자신있게 말할 수는 없습니다.

댓글 달기

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