<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>Mimul&#039;s Developer World - C/C++ Tech category</title>
  <link>http://mimul.com:80/pebble/default/categories/CTech/</link>
  <description>미물의 개발 세상</description>
  <language>ko</language>
  <copyright>미물</copyright>
  <lastBuildDate>Wed, 27 Aug 2008 13:52:00 GMT</lastBuildDate>
  <generator>Pebble (http://pebble.sourceforge.net)</generator>
  <docs>http://backend.userland.com/rss</docs>
  
  <image>
    <url>http://www.mimul.com/pebble/default/images/hhj.jpg</url>
    <title>Mimul&#039;s Developer World (C/C++ Tech category)</title>
    <link>http://mimul.com:80/pebble/default/</link>
  </image>
  
  
  <item>
    <title>gdb 사용 방법</title>
    <link>http://mimul.com:80/pebble/default/2008/07/06/1215344760000.html</link>
    
      
        <description>
          C/C++ 프로그래밍을 하시는 분들은 gdb를 많이 사용하실겁니다. 물론 완벽하게 코딩하시면 뭐 필요 없을 테니깐요.. 간단하게나마 제가 알고 있는 것들을 공유해 드립니다. 그리 많은 정보는 아니고 이것만 알아서 쉽게 문제점들을 찾을 수 있어서 공유합니다.&lt;br /&gt;
&lt;strong&gt;&lt;br /&gt;
1. gdb로 디버깅 방법&lt;/strong&gt;&lt;br /&gt;
먼저 gdb &amp;lt;실행화일&amp;gt; -c &amp;lt;core 화일&amp;gt; 하여 디버거를 실행시킨후 아래와 같이 bt(backtrace)명령어로 어떤 함수를 부르다 죽었는지 확인합니다.&lt;br /&gt;
&lt;pre&gt;(gdb) bt // or where&lt;br /&gt;#0  0xc00000000010e500:0 in pthread_mutex_lock+0x720 ()&lt;br /&gt;   from /usr/lib/hpux64/libpthread.so.1&lt;br /&gt;#1  0xc000000000450b90:0 in __thread_mutex_lock+0xb0 ()&lt;br /&gt;   from /usr/lib/hpux64/libc.so.1&lt;br /&gt;#2  0xc000000000424960:0 in fprintf+0x240 () from /usr/lib/hpux64/libc.so.1&lt;br /&gt;#3  0x4000000000004380:0 in main (argc=2, argv=0x9ffffffffffff290)&lt;br /&gt;    at corpIF.C:326&lt;br /&gt;(gdb)&lt;br /&gt;&lt;/pre&gt;
corpIF.C의 326라인에서 보니까 main-&amp;gt;fprintf 에서 코어가 발생했습니다.&lt;br /&gt;
이제 frame 명령어로 해당 스택으로 이동합니다. 이후 list 명령어로 소스 파일을 확인해 보면 정확한 원인을 유추할 수 있습니다.&lt;br /&gt;
&lt;pre&gt;(gdb) frame 2&lt;br /&gt;#2  0xc000000000424960:0 in fprintf+0x240 () from /usr/lib/hpux64/libc.so.1&lt;br /&gt;(gdb) list &lt;br /&gt;4#2  0xc000000000424960:0 in fprintf+0x240 () from /usr/lib/hpux64/libc.so.1&lt;br /&gt;(gdb) list&lt;br /&gt;239     void stat_process();&lt;br /&gt;240     &lt;br /&gt;241     ////////////////////////////////////////////////////////////////////////&lt;br /&gt;242     // main&lt;br /&gt;243     ////////////////////////////////////////////////////////////////////////&lt;br /&gt;244     int main(int argc, char *argv[])&lt;br /&gt;245     {&lt;br /&gt;246     /* EXEC SQL BEGIN DECLARE SECTION; */ &lt;br /&gt;247     &lt;br /&gt;248          char *uid = (char *)&amp;quot;mimul/mimul@mimuldb&amp;quot;;&lt;br /&gt;(gdb) &lt;br /&gt;&lt;/pre&gt;
해당 계정이 맞는 지 확인해 보시면 코어의 원인을 확인할 수 있습니다.&lt;br /&gt;
&lt;pre&gt;(gdb) print sqlca.sqlcode&lt;br /&gt;$3 = -1017&lt;br /&gt;(gdb)&lt;br /&gt;[mimuldb]/user&amp;gt; oerr ora 1017&lt;br /&gt;01017, 00000, &amp;quot;invalid username/password; logon denied&amp;quot;&lt;br /&gt;// *Cause:&lt;br /&gt;// *Action:&lt;br /&gt;&lt;/pre&gt;
즉, 해당 소스 파일의 오라클 계정의 아이디와 패스워드가 불일치하여 생긴 코어임을 최종 확인할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;  2. 그외 참고 사항&lt;/strong&gt;&lt;br /&gt;
여기는 gdb에 관련된 간단한 커맨드 사용 방법을 알려드립니다.
&lt;pre&gt;[mimuldb]/user&amp;gt;gdb a.out&lt;br /&gt;(gdb) r 20080707 // arg1- 실행&lt;br /&gt;Starting program: /user/corpIF 20080707&lt;br /&gt;warning: Load module /oracle/ORA9/lib/libclntsh.so.10.1 has been stripped.  &lt;br /&gt;Debugging information is not available.&lt;br /&gt;&lt;br /&gt;warning: Load module /oracle/ORA9/lib/libnnz10.so has been stripped.  &lt;br /&gt;Debugging information is not available.&lt;br /&gt;&lt;br /&gt;오라클 데이타베이스  연결에 실패하였습니다. &lt;br /&gt;[mimul/mimul@mimuldb, ORA-01017: invalid username/password; logon denied]&lt;br /&gt;&lt;br /&gt;Program received signal SIGSEGV, Segmentation fault&lt;br /&gt;  si_code: 2 - SEGV_ACCERR - Invalid Permissions for object.&lt;br /&gt;0x9fffffffbf65e500:0 in pthread_mutex_lock+0x720 ()&lt;br /&gt;   from /usr/lib/hpux64/libpthread.so.1&lt;br /&gt;(gdb) l 50 // 50근처의 소스 전후 10라인 표시&lt;br /&gt;45      /* Binding to PL/SQL Records */&lt;br /&gt;46      struct sqltdss&lt;br /&gt;47      {&lt;br /&gt;48        unsigned int tdsvsn; &lt;br /&gt;49        unsigned short tdsnum; &lt;br /&gt;50        unsigned char *tdsval[1]; &lt;br /&gt;51      };&lt;br /&gt;52      typedef struct sqltdss sqltdss;&lt;br /&gt;53      static struct sqltdss sqltds =&lt;br /&gt;54      {&lt;br /&gt;(gdb) l stat_process // stat_process함수 위치의 10라인 표시&lt;br /&gt;512     &lt;br /&gt;513     ////////////////////////////////////////////////////////////////////////&lt;br /&gt;514     // &lt;br /&gt;515     ////////////////////////////////////////////////////////////////////////&lt;br /&gt;516     void stat_process()&lt;br /&gt;517     {&lt;br /&gt;518     /* EXEC SQL BEGIN DECLARE SECTION; */ &lt;br /&gt;519     &lt;br /&gt;520             int v_Result;&lt;br /&gt;521             /* varchar v_Status[32+1]; */ &lt;br /&gt;(gdb) next //다음라인까지 프로그램 실행&lt;br /&gt;(gdb) step // 다음 instruction 실행&lt;br /&gt;(gdb) finish // 현재 프로그램 실행 중지&lt;br /&gt;(gdb) up // 이전 프레임 &lt;br /&gt;(gdb) down // 다음 프레임&lt;br /&gt;(gdb) call myfunction() // 사용자 정의 함수 호출&lt;br /&gt;(gdb) display x // x라는 변수의 값 출력&lt;br /&gt;&lt;/pre&gt;
&lt;u&gt; PS : //이하 문자열은 제가 주석으로 인식하고 해당 커맨드를 설명하는 문구를 넣음&lt;/u&gt;
        </description>
      
      
    
    
    
    <category>C/C++ Tech</category>
    
    <comments>http://mimul.com:80/pebble/default/2008/07/06/1215344760000.html#comments</comments>
    <guid isPermaLink="true">http://mimul.com:80/pebble/default/2008/07/06/1215344760000.html</guid>
    <pubDate>Sun, 06 Jul 2008 11:46:00 GMT</pubDate>
  </item>
  
  <item>
    <title>C에서 디버깅용으로 로그 남기기</title>
    <link>http://mimul.com:80/pebble/default/2008/06/21/1214046300000.html</link>
    
      
        <description>
          예전에 C 프로그램 디버깅용으로 간단하게 사용하던 방법입니다. &lt;br /&gt;
물론 아래 소스를 수정해서 파일로그로 남기고, 설정으로 properties파일에서 읽어오면&amp;nbsp; Log4j 방식과 비슷하네요 ^^. &lt;a href=&#034;http://logging.apache.org/log4cxx/index.html&#034;&gt;log4cxx&lt;/a&gt; 가 있긴 하지만요 ^^. &lt;br /&gt;
&lt;br /&gt;
아래는 샘플링 소스입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt; 1. 로깅을 위한 간단한 소스 : a.c&lt;/strong&gt;&lt;br /&gt;
&lt;pre&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#define LOG_NONE 0&lt;br /&gt;#define LOG_ERROR 1&lt;br /&gt;#define LOG_WARN 2&lt;br /&gt;#define LOG_INFO 3&lt;br /&gt;#define LOG_LEVEL LOG_WARN&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// 로그 레벨별로 관리&lt;br /&gt;int log(char *msg, int level){&lt;br /&gt;  if (LOG_LEVEL &amp;gt;= level) {&lt;br /&gt;    printf(&amp;quot;LOG %d: %s\n&amp;quot;, level, msg);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main(int argc, char** argv){&lt;br /&gt;  printf(&amp;quot;Hi Log Test!\n&amp;quot;);&lt;br /&gt;&lt;br /&gt;  log(&amp;quot;정말 에러났어 얼렁 찾아봐!&amp;quot;, LOG_ERROR);&lt;br /&gt;  log(&amp;quot;워닝이여, 나중에 시간나면 한번 봐~.&amp;quot;, LOG_WARN);&lt;br /&gt;  log(&amp;quot;흐미! 빨랑 테스트 끝났으면 지워버려.&amp;quot;, LOG_INFO);&lt;br /&gt;&lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;strong&gt;2. 실행 결과&lt;/strong&gt;&lt;br /&gt;
LOG_WARN 밑으로는 로그가 안찍히니깐 디버깅용으로 예전부터 썻던 방법입니다. ^^&lt;br /&gt;
&lt;pre&gt;[mimul.com]/home/mimul/&amp;gt; ./a&lt;br /&gt;Hi Log Test!&lt;br /&gt;LOG 1: 정말 에러났어 얼렁 찾아봐!&lt;br /&gt;LOG 2: 워닝이여, 나중에 시간나면 한번 봐~.&lt;br /&gt;&lt;/pre&gt;
        </description>
      
      
    
    
    
    <category>C/C++ Tech</category>
    
    <comments>http://mimul.com:80/pebble/default/2008/06/21/1214046300000.html#comments</comments>
    <guid isPermaLink="true">http://mimul.com:80/pebble/default/2008/06/21/1214046300000.html</guid>
    <pubDate>Sat, 21 Jun 2008 11:05:00 GMT</pubDate>
  </item>
  
  <item>
    <title>HP aCC에서 ACE framework 설치 방법</title>
    <link>http://mimul.com:80/pebble/default/2008/05/08/1210252260000.html</link>
    
      
        <description>
          &lt;u&gt;&lt;strong&gt;1. 다운 로드&lt;br /&gt;
&lt;br /&gt;
&lt;/strong&gt;&lt;/u&gt;&amp;nbsp;- &lt;a href=&#034;http://download.dre.vanderbilt.edu/&#034;&gt;ACE-5.6.tar.gz&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;strong&gt;2. 설치 문서 위치&lt;br /&gt;
&lt;br /&gt;
&lt;/strong&gt;&lt;/u&gt;&amp;nbsp;- 일단 &lt;a href=&#034;http://www.dre.vanderbilt.edu/~schmidt/DOC_ROOT/ACE/ACE-INSTALL.html&#034;&gt;여기&lt;/a&gt; 사이트에서 참조하여 힌트를 얻음&amp;nbsp; &lt;br /&gt;
&amp;nbsp;- 설치 환경은 HP-UX B.11.31, aCC 버전 A.06.12&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;strong&gt;3. 제가 설치한 순서&lt;br /&gt;
&lt;br /&gt;
&lt;/strong&gt;&lt;/u&gt;&amp;nbsp;- Autoconf, m4 버전 확인 후 낮을 경우 설치&lt;br /&gt;
&amp;nbsp; - 환경 설정&lt;br /&gt;
&amp;nbsp;&amp;nbsp; . setenv ACE_ROOT /home/k2/ACE_wrappers &lt;br /&gt;
&amp;nbsp;- vi $ACE_ROOT/ace/config.h &lt;br /&gt;
&amp;nbsp;&amp;nbsp; . #include &amp;quot;ace/config-hpux-11.00.h&amp;quot; 추가 저장함&lt;br /&gt;
&amp;nbsp;- vi $ACE_ROOT/include/makeinclude/platform_macros.GNU&lt;br /&gt;
&amp;nbsp;&amp;nbsp; . include $(ACE_ROOT)/include/makeinclude/platform_hpux_aCC.GNU 추가 저장함&lt;br /&gt;
&amp;nbsp;- setenv LD_LIBRARY_PATH $ACE_ROOT/lib:$LD_LIBRARY_PATH&lt;br /&gt;
&amp;nbsp;- setenv LPATH $ORACLE_HOME/lib:$ORACLE_HOME/lib32:/usr/lib/hpux64&lt;br /&gt;
&amp;nbsp;- 컴파일&lt;br /&gt;
&amp;nbsp;&amp;nbsp; . gmake buildbits=64&lt;br /&gt;
&amp;nbsp;- $ACE_ROOT/lib에 shared library 컴파일됨&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;strong&gt;4. 기타&lt;br /&gt;
&lt;br /&gt;
&lt;/strong&gt;&lt;/u&gt;&amp;nbsp;- aCC A.06.12버전으로 오면서 64비트 옵션이 +DD64로 변경되었음&lt;br /&gt;
&amp;nbsp;--lxti 등에서 링킹 에러나는 경우 /usr/lib/hpux64를 LPATH에 추가해주면 해결됨&lt;br /&gt;
&lt;br /&gt;
그외에 중간 중간에 오류나는 것에 대해서는 ldd &amp;lt;executable&amp;gt;, chatr &amp;lt;executable&amp;gt;를 통해 하나씩 원인을 찾아서 링크해주면 대부분 라이브러리는 컴파일 됨&lt;br /&gt;
삽질의 시간을 줄이도록 제가 한 내용을 공유합니다. 물론 환경에 따라 틀릴수도 있으니 이점 유의하세요.
        </description>
      
      
    
    
    
    <category>C/C++ Tech</category>
    
    <comments>http://mimul.com:80/pebble/default/2008/05/08/1210252260000.html#comments</comments>
    <guid isPermaLink="true">http://mimul.com:80/pebble/default/2008/05/08/1210252260000.html</guid>
    <pubDate>Thu, 08 May 2008 13:11:00 GMT</pubDate>
  </item>
  
  <item>
    <title>CVS Reporting and Statistics Tools</title>
    <link>http://mimul.com:80/pebble/default/2007/08/01/1185979320000.html</link>
    
      
        <description>
          &lt;p&gt;CVS관련&amp;nbsp; 리포팅이나 통계 툴들을 소개합니다. 한번 다운받아서 설치해 보시기 바래요. ^^&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href=&#034;http://cvsplot.sourceforge.net/&#034;&gt;Cvsplot &lt;/a&gt;- free. &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#034;http://ali.as/devel/cvsmonitor/&#034;&gt;CVS Monitor&lt;/a&gt; - 윈도우에서는 구동이 안됨. &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#034;http://statcvs.sourceforge.net/&#034;&gt;StatCVS&lt;/a&gt; - open-source java tool. &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#034;http://www.softwarebee.de/products/chalogen/&#034;&gt;CHaloGen&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;그리고 &lt;a href=&#034;http://opensource.oreilly.com/news/cvs_0900.html&#034;&gt;CVS에 관련된 중요한 팁 10&lt;/a&gt;개를 잘 정리한 곳도 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>C/C++ Tech</category>
    
    <comments>http://mimul.com:80/pebble/default/2007/08/01/1185979320000.html#comments</comments>
    <guid isPermaLink="true">http://mimul.com:80/pebble/default/2007/08/01/1185979320000.html</guid>
    <pubDate>Wed, 01 Aug 2007 14:42:00 GMT</pubDate>
  </item>
  
  </channel>
</rss>
