[완료]디버깅 관련해서 질문 드립니다.

paeksj98의 이미지

기본적인 디버깅 관련 질문 드립니다.

#define aprint() if (DEBUG_MODE) { Uart3_Printf( "[%04d] %s(),%s\n\r", __LINE__, __func__, __FILE__); }

이런경우

aprint(); 호출해서 쓰면 문제가 없습니다.

꼭 필요한 기능인데 아래부분이 문제가 있습니다.

#define aprint(msg)
if (BSJ_DEBUG_MODE)
{ Uart3_Printf(msg);
Uart3_Printf( "[%04d] %20s() %s\n\r", __LINE__, __func__, __FILE__); }

apinrt("%s", strA);

이런식으로 사용하고 싶은데 이렇게는 안되네요.

strA를 포함해서 찍을 경우도 있고..필요 없으면 찍지 않고...

line, func, file는 항상 찍히고 더필요한 내용이 있으면 strA의 내용을 포함해서 찍고 싶은데 잘안되네요.

어떤식으로 처리하는 방법이 있을 듯 한데 좋은 방법이 있으면 알려주세요...^^

shyblue의 이미지

#define aprint(msg) \
{ if (BSJ_DEBUG_MODE) { \
   if (msg) \
    Uart3_Printf( "[%04d] %20s() %s : %s\n\r", __LINE__, __func__, __FILE__, msg); \
   else \
    Uart3_Printf( "[%04d] %20s() %s\n\r", __LINE__, __func__, __FILE__); 
  } \
}
 
sprintf( strA, "%s", blah );
apinrt("%s", strA);

뭐 대충 이런식이면 쉽게 해결될터이고, 이게 아니라면, 방법은 aprint( arg1, arg2 )로 받아서, va_arg등의 stdarg.h에 있는 함수들을 사용해서 구현해서 사용하셔야 할 것이구요.

時日也放聲大哭

時日也放聲大哭

Hyun의 이미지

참고로 질문자가 사용하시는 define 문은 상당히 위험합니다. 소스에서

if( 1 )
    aprint();
else
{
    // do something else
}

의 경우 의도하지 않은 결과를 냅니다.
brucewang의 이미지

제 코멘트를 삭제 합니다. 잘못된 내용이었던 것 같아서...

__VA_ARGS__ 라는 것을 사용하는 것 도 있는데,

#define aprint(...) \
{ if (1) { \
    	printf( "[%04d] %20s() %s : %s\n\r", __LINE__, __func__, __FILE__, ##__VA_ARGS__); \
  } \
}

이렇게 할 경우

aprint("a");
aprint();

모두 되지만, 예상치 않은 결과가 나왔네요..

윗분들께서 조언해 주신것과 함께, 별도의 매크로를 사용하시는... ToT

-------------------------------------------------
$yes 4 8 15 16 23 42

paeksj98의 이미지

감사합니다...^^

댓글 달기

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