프로그램 충돌 보고서를 어떻게 작성하시나요?

욱성군의 이미지

조엘 온 소프트웨어를 보면 충돌 보고서를 자동으로 수집하라는 말이 있습니다. 이중에서 제가 궁금한 것은 어떻게 프로그램이 충돌(예외)에 이르렀는지, 물론 try 구문으로 알아낼 수는 있겠지만 프로그램 전반적인 부분의 처리하지 못한 예외를 어떻게 알아내시는지, 그리고 해당 예외의 파일명, 라인같은 정보들은 어떻게 알아내는가 인데요.

main 부분에서 아예 시작하는 함수 부분을 try로 감싸면 어떻게 어떻게 예외를 모두 감지할 수는 있다고 하더라도 파일명과 해당 에러가 발생한 라인등은 main에서 어떻게 알아내야될지 모르겠습니다. C나 C++ 혹은 C#이나 Java같은 VM 환경에서는 각각 어떻게 처리하고 계신가요?

taeyeung의 이미지

c/c++ 언어를 사용하고 windows XP 환경에서 작업을 할 경우 SetUnhandledExceptionFilter() 함수를 이용해서 사용자 정의 함수를 등록하여 사용합니다. 조엘 온 소프트웨어 책에서는 P202~203에 설명이 있지요

좀 더 자세하게 알고 싶으시면 Debugging Application .NET and Windows 정보문화사 책의 P612부터 읽어 보세요.

욱성군의 이미지

전 gcc를 쓰고 있는데 조엘 온 소프트웨어에 나온 방법들은 win32나 visual studio에서 작동하는 코드인것 같습니다. 리눅스에서도 쓰기 위해서 그냥 단순히 try/catch를 써보았는데요. gcc에서도 __try/__catch처럼 저수준 예외 처리를 할 수 있는 방법이 있나요?

그리고 명시된 예외외에도 모든 경우의 예외를 처리할 수 있도록 하기 위해서 catch(...)를 써보았는데요,

void doit(void) { throw "Exception"; }
 
int main(void)
{
    try 
    {
        doit();
    }
    catch(...)
    {
        exception e;
        cout << e.what() << endl;
    }
}

이런 방식을 사용해 보았는데요, e.what()은 St9exception을 돌려줄 뿐이고 어떤 종류의 에러가 무슨 파일의 몇째 라인에서 발생했는지와 같은 정보는 돌려주지 않는 것 같습니다.

명시되지 않은 모든 종류의 예외를 catch하면서 해당 예외에 대한 자세한 정보를 알아내는 방법은 어떤 것이 있을까요?

dormael의 이미지

저는 자바로

모든 main에 해당하는 부분에 try {..} catch(Throwable t) {로깅..} 와 같은 무식한 방법으로 합니다.
자바의 경우 stackTrace가 매우 친절한 편이라 이것만 해도 불편함이 없던데요.

마이크로 에디션은 제외입니다.

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

욱성군의 이미지

저도 파이썬 같은 경우에는 함수가 실행된 경로나 파일, 라인까지 모두 출력해줘서 쉽게 사용했는데 C/C++는 그런게 잘 안되더라구요.

댓글 달기

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