Study 55

Visual C++ 6.0 디버깅 비정상 종료 해결 방법

Win7 64Bit 환경에서 Visual C++ 6.0을 사용할 때 문제점Visual C++ 6.0이란 개발 도구가 세상에 나온 지도 벌써 20년이 다 되어 가고 있는데 여전히 이 개발 도구로 개발을 하는 곳이 있습니다. 제가 다니고 있는 회사도 그 중 하나인데요. 기존에 개발했던 프로그램들의 유지보수나 추가 기능 개발을 위해 Visual C++ 6.0을 사용할 때가 있습니다. 개발 툴은 오래 되었지만 OS는 그 사이 많이 바뀌었고 현재 사용하는 Windows7 64bit 버전인데요. 그렇다 보니 몇 가지 불편한 점이 있지만 그 중에서 가장 불편한 점은 [Shift + F5]를 눌러 디버깅을 종료할 때 프로세스가 죽지 않는 것입니다. 디버깅으로 실행 프로세스를 종료할 수 없어서 결국 Visual C++ ..

Study 2015.09.17

Mantis Bug Tracker 설치 및 메일 셋팅하기

Bug Tracking System최근 회사에서 효율 적인 업무 분배와 관리를 위해 툴 도입을 고려하게 되었습니다. 그냥 간단하게 업무를 분담하고 주간이나 월간 보고 때 구성원들의 업무 진행 등을 참고하기 위한 용도로 말이죠. 직접 시스템을 만들어서 하는 것도 고려했지만 기존에 만들어져 있는 시스템을 이용하는 것도 함께 고려했습니다. 여러 가지 좋은 시스템들이 있었지만 설치와 사용이 간단하고 많이 사용되고 있다고 하는 MantisBT를 사용해 보기로 했습니다. 이름처럼 MantisBT는 Bug Tracking을 위한 시스템이지만 약간의 커스터마이징을 통해 이슈 관리를 업무 관리 용도로 사용할 수 있다고 하는군요. 막상 사용할 시스템을 선정하고 보니 서버를 구성하는 건 제 몫이었습니다. 어떻게 해야 하나 ..

Study 2014.06.13

편리한 프로그래밍 언어 온라인 교재 - WikiDocs

프로그래밍 언어는 참 다양합니다. 언어가 다양한 만큼 책은 더 다양하죠. 새로운 언어를 공부할 때마다 교재를 구매하곤 하는데 가격도 가격이지만 책을 고르는 것도 부담이 됩니다.얼마 전 부터 파이썬을 공부할 필요가 있어서 여기 저기 뒤져보던 중에 괜찮은 사이트를 하나 알게 되었습니다. 아는 분들은 이미 많이 이용하고 있으리라 생각되지만 더 많은 분들이 이용하면 좋을 것 같아 소개해 봅니다. 바로 무료 온라인 책을 볼 수 있는 WikiDocs라는 서비스입니다. WikiDocs - 온라인 책을 제작하고 공유하는 플랫폼 서비스WikiDocs라는 서비스에 처음 진입하면 볼 수 있는 화면입니다. WikiDocs라는 이름과 함께 간단한 설명이 있고 하단에는 추천책과 공유책 탭이 보입니다.추천책 탭에서는 전체 공유책 ..

Study 2014.02.15

Android 개발 환경 구축

▶ 설치 순서 1. JDK 설치 2. Android SDK 설치 1. JDK 설치하기 1) http://www.oracle.com 에 접속 2) 아래 그림처럼 Downloads 메뉴의 Java for Developers 선택 3) Java Platform(JDK) 7u2 선택(그림 아래의 버전은 다를 수 있음) 4) 약관 동의 후 os 버전에 맞는 설치 파일 다운 로드 5) 다운로드 받은 설치 파일 더블 클릭으로 설치. 설치과정은 간단하며 그냥 next 연속 클릭 후 완료. 2. Android SDK 설치 1) http://developer.android.com/ 에 접속 2) 아래 그림 처럼 SDK를 선택한 후 본인의 환경에 맞는 설치 파일을 클릭 후 다운로드 (아래 그림은 windows 환경) 3) ..

Study 2012.01.19

컴파일러에 대해서...

컴파일러는 보통 front end(프론트엔드), optimizer(최적화기), back end(백 엔드) 세 개의 기본적인 요소로 구성된다. ▶ 프론트 엔드(front end) front end는 high level language로 작성된 소스코드를 분석하는 몇 가지 단계를 수행한다. 먼저 lexical analysis(어휘 분석)이나 scanning의 단계를 수행하는데, 소스 파일의 토큰을 검사하는 과정이다. 여기서 토큰은 소스코드를 구성하는 텍스트 심볼을 의미한다. if (var != 0){} 위의 코드 라인에서 심볼은 if, (, var, != 등이며 모두 토큰이 된다. 토큰을 스캔하는 동안 어휘 분석기는 해당 토큰이 프로그래밍 언어의 규약에 맞는지 검사하고 문맥상 잘못된 토큰이 발견되면 컴파일러..

Study 2010.01.25

static binding, dynamic binding

- binding : 프로그램 요소에 지정 가능한 속성 값을 지정하는 것. - static binding : 정적 바인딩. 주로 컴파일 타임에 이루어지는 바인딩을 말함. = early binding 속도가 빠른 것이 장점. - dynamic binding : 동적 바인딩. 런타임시에 이루어지는 바인딩을 말함. = late binding 속도는 느리나 메모리가 필요할 때 동적으로 할당되므로 효율적이고 유연함. C++ 에서 dynamic binding은 중요한 요소인 Polymorphism을 위해 꼭 필요하다. Polymorphism(다형성)은 동일한 명령(메시지)으로 객체마다 저마다의 방식으로 처리하도록 하는 것을 말하며 base class의 함수를 derived class에서 동일하게(이름 뿐만 아니라 ..

Study 2010.01.25

const와 static

1. const 일반적으로 const는 변수를 상수화할 때 사용한다. 변수를 상수화 함으로써 얻는 이득은? 대형 프로젝트를 진행하다 보면 컴파일도 잘 되고 링크도 잘 되지만 실행해 보면 예상하지 못한 버그가 발생 될 수 있다. 변수나 함수를 const로 상수화시키면 변경하지 말아야 할 변수를 변경함으로써 발생되는 버그의 발생 을 방지할 수 있다. - const를 사용할 때 헷갈리기 쉬운 부분 int iNum1 = 20; int iNum2 = 30; const int* pNum1 = &iNum1; // 포인터가 가리키는 주소 안의 값을 상수화 int* const pNum2 = &iNum1; // 포인터가 가리키는 주소를 상수화 pNum1 = &iNum2; // OK pNum2 = &iNum2; // 상수인..

Study 2010.01.20

delete와 delete[]를 구분해서 사용해야 하는 이유

new[] 를 사용 할 경우 할당할 메모리의 앞에 4바이트 메모리를 더 할당하여 배열의 Size를 저장해 둔다. new[]를 사용해 할당한 메모리를 해제할 때 delete[]를 사용하면 배열의 Size를 확인하지만 delete를 사용하면 확인하지 않고 해제한다. 따라서 delete[]를 사용해야 클래스 배열인 경우에도 각각의 Entry의 소멸자를 호출해 줄 수 있다. 요약하자면 delete와 delete[]모두 메모리 해제는 정상적으로 진행 되지만 클래스 배열 을 delete[]를 사용해서 해제하지 않고 delete를 사용 할 경우 소멸자가 한 번만 호출 되고 메모리를 해제함으로써 문제가 발생할 수 있다.

Study 2010.01.15

C 언어로 작성된 코드를 C++에서 사용할 경우

- C언어로 작성된 코드를 C++에서 사용하기 위해 헤더파일만 include해서 컴파일 할 경우 링크 에러가 발생한다. ==> 해결책 : C언어로 작성된 코드에 C영역임을 명시 해줘야 한다. ex) plus.h #ifdef __cplusplus extern "C" { #endif int plus(int a, int b); #ifdef __cplusplus } #endif 위와 같이 구역을 정해주면 C로 작성된 plus()함수 코드 때문에 C++컴파일러로 컴파일 시 에러가 발생하지 않는다. 구역이 함수 하나일 경우 다음과 같이 사용해도 된다. #ifdef __cplusplus extern "C" int plus(int a, int b); #endif

Study 2010.01.15