[완료] Linux에서의 Error 발생시 확인.

zipsinworm의 이미지

프로그래밍을 하다 보면, 예를들어 소켓 프로그램을 만드는 도중에 여러가지 오류가 발생 할 수 있는 함수에
(네트워크가 끊긴다던지 아니면 잘못된 IP를 넣었다던지) 오류를 잡아 낼 수 있는 방법은 없을까요?

윈도우 처럼 한 프로세서 내에서 여러개의 쓰레드가 동작하며 에러 발생시 에러코드가 설정 되는데
GetLastError() 가 참조하는 변수는 쓰레드간 독립적으로 저장되고 엑세스 되는거 같습니다.

errno.h 에서 errno 전역 변수나 perror()를 쓰면 될 것 같은데 여기에 대해 자세하게 풀이한 문서를 찾아봐도 없네요
(내공이 딸려서 그런거 같습니다.T^T)

아니면 더 쉬운 방법으로 Linux에서 에러를 핸들링 하는 방법이 있는지 궁금합니다.

ganadist의 이미지

errno 맨 페이지에 각각의 오류번호에 대해서 상세하게 설명되어 있습니다.

런타임에서 디버깅하고 싶으면 strace 같은 시스템 콜 추적기를 사용하는 것도 좋습니다.

$ strace -o /tmp/socket.log -f -F -e trace=network ./test_program

각각의 옵션은 strace 맨페이지를 참조하세요 =33

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

reom의 이미지

에러가 발생한 경우 어떤 에러가 발생한 것인지 알고 싶으시면
그냥 쉽게 errno를 프린트하시면됩니다.
printf("error : %d\n",errno);

이렇게 하시면 어떤 에러가 발생했는지 알 수 있으시죠.
단지 에러 번호만 나오기 때문에 man 페이지 등을 살펴보셔야합니다.

에러 설명이 나오게 하시려면
#include string.h
#include errno.h
이 두개를 인클루드해주시고
strerror(errno);
함수를 이용하시면됩니다.
printf("ERROR : %s\n",strerror(errno));
뭐 이런식으로요.

perror() 함수를 사용하셔도 에러가 출력되는데 이때는 에러를 출력할 standard i/o (stderr)가 설정되어있어야 합니다.

zipsinworm의 이미지

printf를 쓸려고 했는데 그것보단 perror이 더 보기가 편하더군요.
답변 감사합니다. ^^

댓글 달기

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