분류 전체보기 (199)
ººº::Development™:: (66)
::JAVA™:: (9)
::C/C++™:: (6)
::Perl/Python™:: (2)
::WEB™:: (7)
::Media™:: (2)
::Database™:: (8)
::Linux™:: (12)
::zEtc™:: (20)
ººº::Learning™:: (31)
ººº::Information™:: (37)
ººº::Note™:: (11)
ººº::Photo™:: (50)
ººº::zEtc™:: (3)
rss

믹시
tistory 티스토리 가입하기!
'ººº::Development™::/::C/C++™::'에 해당되는 글 6건
2009. 4. 10. 11:42
Crash Dump파일을 분석할 일이 생겼는데. 이번에 해본 경험이 없다.
하지만 찾아서 해야지..!! 일단 WinDbg를 이용해 Dump파일을 분석해보자, 나중에 또다시 사용할 수 있게

1. http://www.microsoft.com/whdc/devtools/debugging/default.mspx 로 이동
2. Install Debugging tools 다운로드
   다운로드시 해당 시스템에 맞는 Version을 다운로드
3. http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx로 이동
   덤프 파일이 생성된 환경에 맞게 심볼 파일을 다운로드

자 기본적으로 다운로드 해야하는 파일은 다 다운 받았고, 설치까지 완료 그러면 분석해야 하는 부분을 확인해 보자

1. WinDbg실행 후 심볼파일의 경로를 지정한다.
   File->Symbol File Path를 실행 해당 Symbol의 Path를 잡아준다. 또한 Dump가 사용된 프로그램의 심볼도 작성한다.
  만약 프로그램 심볼만 사용하고 싶으시다면, Source File Path도 잡아준다.
2. File->Open Crash Dump를 실행해서 덤프 파일의 경로를 지정 해서 덤프 파일을 Open

위의 작업까지 완료되었다면, 덤프 파일 내용을 통해 문제되는 부분을 확인할 수 있다.

명령어는 아직 잘 모르겠지만 !analyze -v 명령어를 통해 심볼 파일과 덤프 파일을 비교해서 오류가 나오는 부분을 확인할 수 있는 명령어라고 한다.
fault명령어는 driver 로딩 중 error나 warning이 발생한 드라이버를 확인할 수 있다.


2008. 12. 4. 21:27
입력된 path를 바탕으로 폴더를 만들어 주는 코드.
어찌보면 상당히 간단하다고 생각할 수 있지만, 나같이 C/C++코드를 잘 모르는 사람들에게는 어찌 느껴질지 모르는 코드이다. 자랑두 아닌 챙피하지만, 주로 JAVA로 개발을 해오다 보니 C/C++은 전혀 꽝이었다는... 그러다보니 이런 간단한 코드조차 사람을 당황스럽게 만들 수 있다는 사실.ㅋㅋ 오랫동안 머릿속에 남기기 위해!..

std::string strDirPath;
std::string strTempDir;
int indexOf = 0;
while( true ) {
indexOf = strDirPath.find( "/" );
strTempDir += strDirPath.substr( 0, indexOf ) + "/";

mkdir( strTempDir.c_str(), 0777 );
strDirPath = strDirPath.substr( indexOf + 1, strDirPath.length() );

if( indexOf < 0 ) break;
}

위 코드는 아주 간단하다 생성하고자 하는 PATH에서 "/"문자를 찾아 한 단계씩 폴더를 생성하는 것이다. 위 코드에 보면 폴더가 있는지 유무를 Check하고 하는 디테일한 부분은 존재하지 않는다. 그냥 기본적인 생각만 가지고 있는 코드이다.

:: 그럼 이 글을 읽는 모든 분들에게 오늘 하루 즐겁고 행복한 하루 되시길 ::



2008. 12. 3. 09:13
프로그램을 작성하다 보면 간단한 로직이라도 생각이 안날경우가 있다. 내가 바로 그 경우로 아주 쉽게 너무 자주 이런 현상이 발생한다. 지금 내가 쓰고자 하는 포스트도 같은 맹락에서 작성하는 것이다.
C나 C++로 코드를 작성하는 가운데 오늘 날짜를 구해야 하는 경우가 있는데 이럴 경우 어떻게 할까? 순간적으로 코드가 생각이 안나서 이렇게라도 글로 남겨 놓는다.

struct tm*    datetime;
time_t    t;
t = time( NULL );
datetime    = localtime( &t );

printf( "%d/%02/%02d %02d:%02d:%02d", datetime->tm_year - 1900,
 datetime->tm_mon + 1,
datetime->tm_mday,
datetime->tm_hour,
datetime->tm_min,
datetime->tm_sec );

코드는 아주 간단하다. 위와 같은 형식으로 작성해 주면 되고, 년/월/일 시:분:초 형식으로 사용하면 된다.

:: 이 글을 읽는 모든 분들에게 오늘 하루 즐겁고 행복한 하루 되길 ::



2008. 11. 6. 09:04
기존 솔루션을 Java에서 C++로 바꾸는 프로젝트가 진행중이다. 기존에는 Java를 사용하기 때문에 공개된 API를 가져다 사용하기 편했지만, C++로 넘어오면서는 내가 많이 사용해보지 않은 플랫폼으로 인해 라이브러리 하나 사용하기도 쉽지가 않다. 그러다가 XML을 사용하기 위해 apache xercex-c 사용이 정해진 이후 해당 라이브러리를 사용하기 위해 삽질한 흔적을 나겨본다.

xercex-c 사용을 위해 지금 현재 개발 환경을 간략하게 살펴보면, Fedora8에서 Eclipse에서 C++코딩을 하고 있다. 기본적인 Charset은 UTF-8을 사용하고 있다.

우선 xercex-c사용을 위해 해당 라이브러리르 설치하자, 설치는 간단하게 yum을 통한 install소스코드를 직접 build하는 방식이 있다. 두방식의 가장 큰 차이점은 yum을 통한 install은 내가 원하는 버전 선택이 안된다는것과, 소스코드 build는 귀찮다는 단점이 가장 큰 차이점으로 보이지만, 더 큰 차이점은 한글을 사용하는데 있어서 yum을 통해 install되는 2.7.* 버전은 한글사용에 문제점이 있기때문에 한글을 사용해야 하는 분들은 xercex-c홈페이지에서 3.* 버전을 다운받아서 build후 사용하시기 바랍니다.

1. build 방법
xercex-c 홈페이지에서 최신 버전의 xercex-c를 다운받은 후 특정 폴더에 압축을 해제한다.
$ ./configure
$ make

위와 같은 명령이후에 /usr/local/include 폴더와 /usr/local/lib 폴더에 보면 해당하는 라이브러리 파일과 헤더 파일이 존재한다. 위와 같이 존재하게 되면 빌드 자체는 성공적으로 완료된 것이다.

2. 사용방법
해당라이브러리를 사용하기 위해서는 컴파일 옵션과 실행시 해당 라이브러리를 링크해줘야 한다.
컴파일
-I(대문자 I) 옵션   : 해당 라이브러리 해더 파일이 존재하는 include 폴더를 선택해 줘야 야 함
-l(소문자 L) 옵션  : 해당 라이브러리 이름을 선택
-L                      : 해당 라이브러리가 존재하는 폴더 선택
gcc -I /usr/local/include -lxercex-c -L /home/workspace/lib

실행
실행시는 해당 라이브러리가 존재하는 PATH를 시스템에 설정해 줘야 한다. 해당 라이브러리 Path는
$ export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

더 자세한 내용은 해당 홈페이지를 살펴보면 편하게 사용하실 수 있을 것이다. 또한, xercex-c는 윈도우와 다른 OS에서도 사용 가능하기 때문에 해당 OS사용자들은 홈페이지를 통해 사용 방법과 설정 방법을 습득하면 될 것이다.
마지막으로 xercex-c는 dom, sax, sax2를 모두 지원한다고 나와있다. 그리고 직접 C++상에서 xml을 파싱하는 내용은 추후 다시한번 포스팅 하도록 하겠다.

:: 관련 링크 ::
apache xercex-c :: http://xerces.apache.org/xerces-c/





2008. 4. 16. 23:59
아래 글에 이어서 이 warning은 VS2005를 사용해서 XSI v6.0의 com api dll을 다시 컴파일 할 때 나타나는 warning이란다.!
( Recompiling COM API dll for XSI v.6.0 using Visual Studio .NET 2005 )
영문을 그냥 직역하다 보니 이해가 좀 안되지만???
머 우짜든 나는 에러는 다음과 유사하다
warning C4278: 'GetObject': identifier of typelibrary 'XXXX.tlb' is already macro. Please use 'rename' modifier.

warning C4278: 'GetObject': 형식 라이브러리 'XXXX.tlb'의 식별자가 이미 매크로입니다. 'rename' 한정자를 사용하십시오

위에서 GetObject는 warning이 나는곳마다 다 틀리다 왜냐 라이브러리마다 모두 다 틀리기 때문에 우짜든 형태는 위와 유사하고 warning이 발생한 곳은

XXXX.tbl를 import한 곳이다.
영문 그래로 rename 한정자를 사용해 다음과 같이 수정해 주면 된다.

#import <XXXX.tlb> rename( "GetObject", "GetObjectA" )

GetObject는 warning난 매세지에 나타난 이름을 그대로 사용하면 되고 두번째 파라미터는 아무렇게나 원하는 이름으로 재명명 해주면 된다.

일단 warning은 잡자!!!


2008. 4. 16. 23:28

이번 프로젝트에 사용할 ActiveX 컨트롤러를 만드는 중에 VC6로 작성된 것을 VS2005로 컴파일 할라고 하는디!
이게 어찌된 일인지 컴파일 하면 이것저것 마춰야 하는게 왜 그리 만은지!!

이왕 정리하기로 맘먹은거 하나하나 해결하면서 정리해 보자.

1. For문의 지역 변수 스코프

for( int i = 0; i < 5; i++ )
{
}
for( i = 0; i < 10; i++ ) {}
VS6에서는 위와같이 작성해두 된다고 한다. 이유는 모르지만( 역시 난 C와 C++은 쥐약이야ㅠㅠ)
머 일단 문제가 발생하고나서는 당연지사 스코프 문제로 아래쪽 for문에서 i를 int형 혹은 해당하는 형으로 선언해주니 문제 해결

2. warning C4996
이넘의 워닝! 아주 죽을 맞이다.! 어찌하면 안날까? ActiveX자체두 잘 모르는디! ㅡㅡ;
일단 나타나는 워닝을 인터넷을 찾아댕기면서 하나한 해결해 보자! 이럴 시간두 없는디!ㅡㅡ;
warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
VS2005에서 부터는 CRT라이브러리 함수의 문자열을 다루는 함수의 안정성에 많은 신경을 쓰면서 기존의 문자열 함수에 _s를 붙여서 버퍼의 길이를 지정하도록 권장하고 있기 때문에 strcpy같은 문자열 함수에서 위와 같은 warning이 발생한다.

위와 같은 warning이 나타날 경우에는 stdafx.h 파일 상단에 아래와 같이 정의해 주면 된단다.
#define _CRT_SECURE_NO_WARNINGS
혹은
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAES 1
혹은
#define _CRT_SECURE_NO_DEPRECATE
위의 정의가 뜻하는 바는 시간이 없어서 패스.

다음으로
warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _stricmp. See online help for details.
위와 같은 warning이 날 경우에는 stdafx.h 파일 상단에
#define _CRT_NONSTDC_NO_DEPRECATE
위와 같이 정의해 주면 된단다.!!

일단 지금까지 나온 warning을 바탕으로 해결된 내용..
난중에 추가적인 내용이 나오면 다시 붙여보장!!

'ººº::Development™:: > ::C/C++™::' 카테고리의 다른 글

[툴] Windows Crash Dump 분석  (0) 2009.04.10
[C/C++] 디렉토리 만들기..  (1) 2008.12.04
[C/C++] 오늘 날짜 구하기  (1) 2008.12.03
[C/C++] apache xercex-c 사용하기  (0) 2008.11.06
[C/C++] warning C4278  (0) 2008.04.16


prev"" #1 next