Symbian C++ Essential Coding Tips (korean)

  • Uploaded by: Symbian
  • 0
  • 0
  • May 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Symbian C++ Essential Coding Tips (korean) as PDF for free.

More details

  • Words: 3,358
  • Pages: 32
필수 Symbian OS

코딩 팁

시장 진출 루트를 확보하십시오 Symbian Signed 는 Symbian OS 소프트웨어 개발 자들이 어플리케이션에 디지털 서명을 받도록 하 는 업계 후원 프로그램입니다. ‘Symbian Signed’ 인증 어플리케이션이 되기 위해서는 각종 표준 테스트를 통과해야 합니다. 어떤네트워크 오퍼레 이터와 휴대폰 제조업체들(예: Orange, Nokia, Sony Ericsson)은 이제 서명된 C++ 및 AppForge MobileVB/Crossfire 어플리케이션만 자사 채널을 통해 유통시키고 있습니다. Symbian Signed 를 통과한 어플리케이션은 ‘application source untrusted’ 경고 없이 실행할 수 있고, B2B 어플 리케이션 카탈로그에 실립니다. 어플리케이션 인증 을 받은 ISV 도 ‘for symbian OS’ 로고를 사용할 수 있 습니다:

좀더 상세한 정보는 www.symbiansigned.com 을 방문하십시오

필수 Symbian OS

코딩 팁

출판

코딩 팁 필수 Symbian OS 시리즈 1st edition, 12/06 발행자: Symbian Software Limited 2-6 Boundary Row Southwark London SE1 8HP 영국 www.symbian.com 상표, 저작, 면책 ‘Symbian’ ‘Symbian , OS’및 기타 관련 Symbian 마크는 모두 Symbian Software Ltd 의 상표입니다. Symbian 사는 본 책자에서 언급되는 모든 제 3 자의 상표권을 인정합니다. © Copyright Symbian Software Ltd 2006. All rights reserved. 본 책자의 어느 부분도 Symbian Software Ltd 의 명시된 서면 허가 없이 재생할 수 없습니다. Symbian Software Ltd 는 본 문서에 실린 정보의 적합성이나 정확성에 대해 어떤 보장이나 보증 도 하지 않습니다. 본 문서에 실린 정보는 단지 일반적 정보 목적을 위 한 것이며, 다른 어떤 목적을 위해서도 사용하거나 의존할 수 없습니다.

편찬: Phil Spencer Hamish Willee 편집장: Freddie Gjertsen Satu McNabb 한국어 검토 : 임형태 손기환

디자인 컨설턴트: Annabel Cooke Merchant Adventurer (해외 담당): James Mentz 심사: Ricky Junday

감사의 말 수년 간에 걸쳐 코딩 비결과 최고 관행에 대한 정보를 제공해 주 신 고도의 기술과 경험을 보유하신 소프트웨어 엔지니어 여러분 들 모두에게 감사의 말씀을 드립니다. 본 책자에 실린 많은 비결 은 그분들의 공동 지혜에서 유래한 것입니다.

서문 Symbian OS 용 어플리케이션을 프로그래밍 할 때는, 설 계에서부터 설치 파일의 최종 터치에 이르기까지, 여러 가지 요소를 고려해야 합니다. 그 모두가 어플리케이션 의 품질과 견고함에 영향을 끼칩니다. 본 책자에는 개발 자들이 가능한 한 최고로 신뢰할 수 있는 Symbian OS 어 플리케이션을 만들도록 돕는 유용한 힌트와 팁 그리고 링크가 나와 있습니다.

차례 일반 팁.............................................................................. 2 설계 팁.............................................................................. 4 코딩 팁.............................................................................. 6 테스팅 팁 ........................................................................ 17 디버깅 팁 ........................................................................ 18 참고문헌 ......................................................................... 21 개발자 자원 .................................................................... 22

2

일반 팁 1. Symbian Developer Network 은 Symbian OS 어플리케

이션 프로그래밍에 도움이 되는 많은 귀중한 자원들 을 호스팅 합니다. http://developer.symbian.com 를 정기적으로 방문해 최신 SDK, 기술정보, 코드 예 그 리고 백서등을 입수하십시오. Developer 네트워크 웹 사이트는 다음 자료에 대한 액세스를 제공합니다: • Symbian OS FAQ 데이터베이스 – 개발자를 위한 매우 귀중한 정보 소스로 설계 및 코딩에 대해 가장 자주 묻는 질문과 대답이 나와 있습니다. • Symbian OS C++ Coding Standards 를 포함한 많은 백 서들 – Symbian OS 자체를 개발하면서, Symbian 은 중요한 여러가지 코딩 언어 및 스타일에 대한 정의를 내렸습니다. Coding idioms paper 에 외부 개발자들을 위한 그런 설명이 나와 있습니다. 이미 검증된 이 컨 벤션을 이용하면, Symbian 사가 Symbian OS 작업 기 간 중에 얻은 모든 경험의 혜택을 볼 수 있습니다. • Symbian OS Developer Library – 공인 API 레퍼런스 및 Symbian OS 안내서입니다. • 다운로드 – 어플리케이션 예제, 유틸리티 라이브러리, Symbian OS 의 일부이지만 모든 휴대폰에는 장착될 수 없는 寗궈쳄皓 시스템 API, Symbian OS 신 버전의 API 를 구 버전 OS 에 실행시킬 수 있도록 하는 포팅된 (ported) 라이브러리 등을 다운로드 할 수 있습니다.

3

• 디버깅 및 개발용 툴에 대한 정보 • 뉴스그룹 포럼 (http://developer.symbian.com/forum) Symbian 엔지 니어와 광범위한 개발자 커뮤니티로부터 자문을 구 할 수 있는 곳. 포럼에서는 C++ 및 Java 관련 질문에 서부터 하드웨어와 Symbian Signing 프로세스까지, 개발의 모든 면을 다룹니다. 2. Symbian Developer Network 뉴스레터를 구독하십시

오(http://developer.symbian.com/main/getstarted /newsletterarchive) – 뉴스레터는 월간으로 이메일 을 통해 배포되며, 최신 Symbian 개발자 뉴스를 접 할 수 있는 최상의 방법입니다. 3. Symbian OS 를 사용하는 휴대폰 제조업체들도 개발

자 프로그램을 운영하고 있습니다. 해당 업체 사이 트에 등록해 최신 휴대폰 관련 정보와 팁을 입수하 십시오. 4. 자격증을 받으십시오!

(http://developer.symbian.com/main/academy) Accredited Symbian Developer 자격증은 고용주에게 여러분이 유능한 Symbian OS 엔지니어라는 것을 보 여주고, 여러분 자신의 Symbian OS 능력을 객관적으 로 평가하는 데 도움이 됩니다. 5. Symbian Signed 는 Symbian OS 휴대폰에서 실행되는

어플리케이션을 설계하는 최고의 관행을 장려합니

4

다. Symbian Signed 어플리케이션은 업계품질 지침을 준수하고, 서명된 어플리케이션에 대한 네트워크 오 퍼레이터 요건을 지원합니다. Symbian Signed 웹사이 트 (www.symbiansigned.com)로 가서 상세한 인증 절 차를 알아 보십시오. 6. Symbian 및 Symbian 기반 제조업체들 이외에도 활

발한 개발자 커뮤니티가 있습니다. www.symbian.com/developer/about/trdprtysites.html 에 잘 알려진 몇몇 제 3 자 디벨로퍼 사이트들의 링 크가 나와 있습니다. 7. 마지막으로, 구입 가능한 Symbian OS 출판물이 점

점 더 많아 나오고 있습니다. Symbian Press (http://developer.symbian.com/main/academy/press) 는 각종 주제별 서적들을 제공합니다. 이들 서적들은 모두 Symbian OS 코드를 좀더 쉽고 신뢰할 수 있게 프로그래밍 하는 데 도움이 되도록 설계되었습니다.

설계 팁 1. Symbian OS 를 위한 가장 중요한 설계 팁은“엔진”

과 UI 코드를 각기 다른 모듈로 분리시키는 것입니 다. Symbian OS 자체가 그 방법으로 설계되었고, 그 방법은 다른 UI 시스템 간 포팅을 지원합니다. 한 가지 방법은 Binary level 에서 그러한 구별을 해서 모든 비 UI 관련 코드를 한 개의 별도 엔진 .DLL 파일

5

로 만드는 것입니다. 그 다음 어플리케이션 UI 를 이 .DLL 에 연결해 엔진 기능에 액세스 할 수 있습니다. 다른 한 가지 방법은 Source level 에서 그 구별을 해 서, 어플리케이션은 하나의 싱글 .APP 파일로 만들지 만, ‘엔진’ 과 UI-관련 코드를 다른 .CPP 및 .H 파일로 분리시켜, 관리와 디버깅이 쉽도록 하는 것입니다. 이 방법으로 코딩하면, 신규 UI 플랫폼에서 포팅 부 담을 덜 수 있습니다; 순수 엔진 코드는 자주 어떤 UI 플랫폼에도 변경없이 실행됩니다. 그래서 신규 UI 에서 포팅하고 최적화해야 하는 것은 여러분 자 신의 별도 UI layer 뿐입니다. 2. 현지화 지원을 염두에 두고 설계하십시오. 소스 파

일에 하드 코딩된 문자열이나 Literal 을 절대 넣지 마십시오 – Symbian OS 가 문자열 저장을 위해 제공 하는 리소스 파일 메카니즘을 사용하십시오. 3. 문서가 첨부되고 해당 SDK 및 Symbian OS Release 용

으로 지원되는 API 만을 사용하도록 유의하십시오. 지원되지 않거나 성능이 떨어지는 API 를 사용하면 나중에 어플리케이션에 문제가 발생할 수 있습니다 – 예를 들어, Symbian 은 향후 Release 에서 외부 개 발자 사용 용도가 아닌 API 를 변경 또는 제거할 수 있는 권리를 보유합니다. 4. 모든 휴대폰에 모든 ‘시스템’파일들이 존재한다고

가정하지 마십시오. Symbian OS 라이센스 소유자들

6

이 자사 휴대폰을 커스터마이즈할 수 있는 범위는 넓습니다; 같은 플랫폰 기반 휴대폰도 제조업체에 따라 다른 지원 파일을 장착할 수 있습니다 – 예를 들어, 여러분이 재생하기를 원하는 사운드 클립의 위 치를 하드 코딩한다면 우수한 이식성이 보장되지 않 습니다. 최소한도, 지원파일이 미래 휴대폰에 존재하 지 않을 경우를 가정해 언제나 에러 상태에 대한 적 절한 처리를 고려해야 합니다.

코딩 팁 아래에는 코드 작성 시에 염두에 두어야 할 일반적 인 팁이 나와 있습니다. 1. 어플리케이션이 시스템 종료 이벤트를 처리하는지

확인하십시오. AppUi::HandleCommandL()메소 드(method)에서 EEikCmdExit (및 모든 플랫폼-관 련 이벤트, 예: Series 60 의 EAknSoftkeyBack)을 처리하는 것이 필수적입니다. 2. Incoming 시스템 이벤트를 처리하십시오. 여러분의

어플리케이션이 멀티타스킹 휴대폰 시스템에서 운 영된다는 것을 명심하십시오. 얻거나 잃은 이벤트 등에 세심한 주의를 기울여, 사용자가 높은 우선순 위 통지를 받을 때 정확하게 반응해야 합니다. 예를 들어, 어플리케이션이 포커스를 잃도록 할 수 있는 착신 전화가 있을 때 현재의 상태와 데이터를 저장

7

하도록 보장해야 합니다 (즉, 표준 ‘to background’ 이벤트에 대해 적절하게 반응해야 합니다 – 자세한 것은 SDK 를 참조하십시오). 일반적으로, 프레임워 크가 여러분을 대신해 이것을 처리하므로 여러분이 특별히 조치할 일은 없습니다 – 그러나 여러분이 프 레임워크가 의도된 대로 작동되는 것을 방해하는 무 엇인가를 하지 않도록 확인해야 합니다. 3. 메모리처리는 Symbian OS 에서 고려해야할 중요한

주제입니다. 휴대폰에서 동작이 에뮬레이터에서 동 작과 다를 때가 있다는 점에 유의하십시오. Symbian Signed 에 제출해서 테스트 받기 전에 실제 휴대폰 에 어플리케이션을 테스트하는 것이 필수적입니다. 4. Stack 은 작습니다!가능하면 객체를 Stack 이 아니

라 Heap 에 할당하십시오. 설명 없는 KERN-EXEC 3 크 래시는 Stack Corruption/Overflow 증상일 경우가 많 습니다. 5. 어플리케이션 패닉은 여러분 코드에 Bug 가 있다

는 표시입니다. 흔히 하는 주요 오류는 다음과 같습 니다: • CleanupStack 에 비멤버, Heap 할당 변수를 추가 하는 것을 잊는 것 • CleanupStack 에 멤버 변수를 넣는 것 – 절대 그렇게 하면 안됩니다; 보통 때처럼 그냥 Destructor 에서 삭 제하십시오.

8

• ‘이중 삭제’– 예: CleanupStack 에서 이미 삭제된 항목을 올바로 Pop()하지 않아, Stack 이 그것을 나 중에 다시 삭제 하도록 만들거나, 함수를 사용한 후 에 삭제했지만, NULL 로 설정하지 않아, Destructor 에 서 다시 삭제되는 것. • Destructor 에 존재하지 않는 변수의 함수에 액세스 하는 것. 예를 들면, 아래 코드는 iSomeServer 가 NULL 이면 패닉이 일어납니다 – 메모리를 할당하기 전에 객체를 삭제한 경우나, 어플리케이션의 다른 어 디에서 메모리를 삭제했을 때 나타날 수 있습니다: CMyClass::~CMyClass() { iSomeServer->Close(); delete iSomeServer; }

는 항상 아래와 같이 코딩 되어야 합니다: CMyClass::~CMyClass() { if (iSomeServer) { iSomeServer->Close(); delete iSomeServer; } }

9

• NULL Pointer 의 함수를 호출하는 것 • 이미 영역밖으로 나간 변수의 함수에서 함수를 호출 함. 예를 들어, Stack 기반 변수를 비동기성 함수로의 Callback 으로 패싱하는 것. 6. 시스템 리소스가 가용하지 않을 때 적절하게 Fail 되

는 것도 중요합니다. 가장 제한적인 리소스는 보통 시스템 RAM 이기 때문에, 저 메모리 상태를 취급할 때는 조심해야 합니다. 아래 설명 대로, 2-단계 Construction 및 CleanupStack 사용이 그러한 방어적 프로그래밍에 필수적입니다. 7. Close()메소드가 있는 ‘R’ 클래스에는 항상

CleanupClosePushL()를 사용하십시오. 그러면 Leave 발생 시 확실하게 클린업되는 것을 보장할 수 있습니다. 예를 들면: RFile file; User::LeaveIfError(file.Open(…)); CleanupClosePushL(file); … CleanupStack::PopAndDestroy(&file); 또한 Close()대신에 Release()또는 Destroy()를 사용하는 ‘R’ 클래스에는 CleanupDeletePushL()및 CleanupReleasePushL()을 사용할 수 있습니다.

10

8. 또한 CleanupStack 은 확장 가능한 메카니즘으로

Leave 가 발생했을 때는 무엇이든지 클린업할 수 있 다는 것을 기억하십시오. 처리해야 할 상황이 복잡한 경우에, 그냥 무시하고 적절하게 클린업하지 않으면 안됩니다. 좀더 자세한 정보는 TCleanupItem 에 대한 Symbian OS 라이브러리 문서를 참조하십시오. 9. 멤버 HBufC 변수를 삭제하고 동일 변수에 재할당하

기를 원하는 경우에는 삭제 후에는 언제나 NULL 로 설정하십시오. HBufC 할당 (또는 재할당)이 잠재적 으로 Leave 될 수 있기 때문에, Destructor 가 더 이 상 존재하지 않는 HBufC 삭제를 시도하는 상황이 발생할 수 있습니다. 이런 일이 물론 Heap 할당 변 수에도 생기지만, HBufC 사용 시 생기는 경우가 보 통입니다. 10. 여러분 자신의 TRAP 을 사용해야 할 이유가 있을 때

는, 에러 메시지를 전부 무시하지 마십시오. 자주 일 어나는 코딩 실수는 다음과 같습니다:

TRAPD(err, DoSomethingL()); if (err == KErrNone || err == KErrNotFound) { // Do something else }

11

위의 예는 모든 다른 에러 코드가 무시되었다는 의 미입니다. 그러나, 패턴이 꼭 위와 같아야 한다면, 다 른 에러는 Leave 로 만드십시오: TRAPD(err, DoSomethingL()); if (err == KErrNone || err == KErrNotFound) { // Do something else } else User::Leave(err); 11. CleanupStack 에 PushL()할 때를 기다리지 마십

시오. 새로 할당된 모든 객체 (멤버 변수 제외)는 Stack 에 즉시 추가시키십시오. 예를 들어, 아래 예는 잘못된 것입니다: void doExampleL() { CSomeObject* myObject1=new (ELeave) CSomeObject; CSomeObject* myObject2=new (ELeave) CSomeObject; … // Do something here with the variables CleanupStack::PushL(myObject1);

12

CleanupStack::PushL(myObject2); // Do something more with the variables … CleanupStack::PopAndDestroy(2); // myObject2, myObject1 }

myObject2 의 할당에 실패할 수 있고 그러면 myObject1 은 클린업될 수 없는 ‘dangling’ 으로 남 습니다. 올바른 방법은 아래와 같습니다: void doExampleL() { CSomeObject* myObject1=new (ELeave) CSomeObject; CleanupStack::PushL(myObject1); CSomeObject* myObject2=new (ELeave) CSomeObject; CleanupStack::PushL(myObject2); … // Do something here with the variables … CleanupStack::PopAndDestroy(2); // myObject2, myObject1 }

13

12. 이름이 ‘C’ 로 끝나는 함수(예: NewLC()메소드)는

객체를 자동으로 CleanupStack 에 넣는다는 점에 유의하십시오. 이들 객체를 Stack 에 Push 하지 마십 시오. 그러면 객체가 이중으로 존재하게 됩니다. 이 름이 ‘C’ 로 끝나는 함수는 비멤버 변수를 할당할 때 유용합니다. 13. 2 단계 Construction 은 Symbian OS 메모리 관리의 주

요한 부분입니다. 기본 룰은 Symbian OS Constructor 나 Destructor 가 절대 Leave 가 되면 안된다는 것입 니다. C++ Constructor 가 Leave 되면, 포인터가 없기 때문에 부분적으로 구축된 객체들이 클린업될 수 없 습니다. 그 이유로, Symbian OS Constructor 는 객체 를 그냥 Instantiate 하고, 그 다음에 그 객체가 멤버 데이터를 Instantiate 할 수 있는 ConstructL()메 소드를 제공합니다. ConstructL()가 Leave 하면, 표준 Destructor 가 호출되어 그 시점까지 성공적으 로 할당된 모든 객체를 제거하도록 합니다. 이 설계 패턴을 충실히 반영해서 코드에서 메모리 누출이 되 는 것을 막는 것이 필수적입니다. 각 코드 라인을 작 성할 때마다, 스스로에게 아래의 질문을 하는 것이 좋습니다:“이 라인이 Leave 될 수 있는가?”대답이 “예”라면, 그 다음에 생각할 것은,“모든 리소스가 Free 가 되어야 하나?” 14. 여러분의 코드에 _L()마크로를 사용하지 마십시

오. 이 함수는 Symbian OS v5 이후 구식이 되었습니 다 – 그래서 _LIT()을 사용하는 것이 좋습니다.

14

_L()의 문제점은 TPtrC(const TText*) Constructor 를 호출하고, 그 다음 Constructor 가 문자열의 길이를 계산하는 strlen()함수를 호출해야 하는 것입니다. 이것은 추가 RAM 을 소모하지는 않지만, 실행시간에 CPU 싸이클을 소모합니다. 그 반대로, _LIT()마크 로는 컴파일 시간에 완전히 초기화된 구조를 직접 구 축하기 때문에, TPtrC 구축을 위한 CPU 오버헤드를 절약합니다. 또한 하드 코딩된 Literal 이 꼭 필요한 지 를 고려해야 합니다; 하드 코딩된 Literal Descriptor 들 은 어플리케이션을 나중에 현지화하는 경우 코딩을 다시 해야 할 수 있습니다. 15. 함수 파라미터로 Descriptor 을 사용하는 경우는, Base

클래스를 디폴트로 사용하십시오. 대부분의 경우에 const TDesC& 로 Descriptor 를 패싱하십시오. 변경 가능 Descriptor 에는 TDes& 를 사용하십시오. 16. 객체를 함수에 전달 또는 리턴할 때는 여러분이 삭

제하는 객체의 소유권을 가지고 있는지 확인하십시 오! Symbian 사가 사용하는 컨벤션에서는, 메소드 에 있는 Pointer 는 Caller 에게 소유권 이전을 표시하 고, 레퍼런스는 전달된 객체의 소유권이 원 소유자 에게 남는다는 것을 표시합니다.

15

17. Active Object-는 Symbian OS 기능의 주요한 요소입

니다. SDK 문서와 Symbian Developer Network 백서등 을 숙독해 이 Active Object 들의 속성을 잘 이해하는 것이 중요합니다. 유용한 팁 몇 가지를 보면 다음과 같습니다: - RunL()안에서 TRAP()을 호출할 필요가 없습 니다. Active Scheduler 자체가 이미 RunL()을 TRAP 하고, Leave 후에 CActive::RunError() 를 호출합니다. - 여러분은 자신의 RunError()함수를 구현하 여 RunL()의 Leave 시 처리하도록 하십시오. - RunL()작동은 짧게, 빨리 하십시오. 길게 작 동하면 다른 Active Object 이 동작하는 것을 방 해합니다. - 언제나 DoCancel()함수를 구현하고 언제나 AO Destructor 에서 Cancel()을 호출하십시오. 18. 마찬가지로, 가능하면 언제나 Active Object 프레임워

크를 활용하십시오. Loop 에서 잦은 Polling 은 배터 리로 작동되는 디바이스에서는 아주 부적당하고, 상 당한 파워 손실을 유발할 수 있습니다. 게임을 프로 그램할 때 이 점에 특히 유의하십시오 – 좀더 자세 한 것은 Symbian Developer Network 웹사이트의 기술 문서 (www.symbian.com/developer/techlib/papers/porting_ 3D_games/XenGames_paper.pdf ) 를 참조하십시오.

16

19. ViewSrv 11 패닉은 게임 같은 분주한 어플리케이션을

프로그램할 때는 방해물입니다. 이것은 어플리케이 션에 있는 ViewSrv Active Object 가 제때 View server 에 반응하지 않을 때 발생합니다. 허용되는 최대 반 응 시간은 보통 10-20 초입니다. 상세한 설명은 FAQ0900 을, 이 문제를 피하는 실용적인 팁은 FAQ-0920 을 참조하십시오. 둘 다 www3.symbian.com/faq.nsf 의 Symbian OS FAQ 데이터베이스에서 입수할 수 있 습니다. 20. HBufC 로 들어가려고 할 때 HBufC::Des()를 사

용할 필요가 없습니다. 그냥 * 연산자로 HBufC 를 Dereference 하기만 하면 됩니다 – 이점은, 예를 들 어, TDesC& 파라미터가 필요한(위에서 추천한 대 로) 메소드에 대한 인수로 HBufC 를 전달할때, 특히 중요합니다. 21. 표준 어플리케이션 .INI 파일 기능을 사용할 때는 (즉,

Application UI 클 래 스 에 서 Application()>OpenIniFileLC();API 를 사용함으로써), 스트림 에 버전 번호 정보와 함께 적는 것을 잊지 마십시오. 그러면 여러분 어플리케이션의 미래 버전을 위한 새 스트림을 만들 수 있고, 최종 사용자가 미래에 귀하 제품의 새 버전을 설치할 수 있습니다.‘또한’ old 亮 .INI 파일이 맞는 세팅이나 스트림을 찾을 수 없더라 도 새 버전에 패닉 상태를 유발하지 못합니다.

17

22. 어플리케이션에 프레임워크 클래스를 구현할 때는

조심하십시오. 언제나 제공되는 플랫폼-고유의 프 레임워크 클래스에서 파생시켜야 합니다. 예를 들 어, UIQ 에서는, AppUi 클래스를 CEikAppUi 에서 파생시키지 말고, CQikAppUi 에서 파생시키십시 오. 모든 어플리케이션 베이스 클래스 (CQikAppUi, CQikApplication, CQikDocument)는 어플리케이션들이 정확하게 작동하도록 하기 위해 광범위 프레임워크가 의존하 는 기능을 추가합니다.

테스팅 팁 1. 테스팅 팁 중에서 가장 중요한 것은, 그냥 에뮬레이

터 전체를 종료시키는 것이 아니라, 에뮤레이터 하 에서 어플리케이션을 종료시키는 것입니다. 디버그 모드에는, 어플리케이션 프레임워크 종료 함수들 주변에 메모리와 핸들 체킹 코드가 있습니다. 어플 리케이션을 종료하면, 이 코드가 작동되어 메모리 누출이 있는 지 아니면 핸들(예: R 객체)이 오픈 상 태인 지를 볼 수 있습니다. UIQ 어플리케이션에는 이 목적을 위해 종료 메뉴 아이템을 디버그 모드 만으로 제공하는 것이 관례입니다. 2. 다른 필수적인 팁은, Deployment 전에, 정확한 플랫

폼 의존 정보가 .PKG 파일에 포함되는 것을 보장하 는 것입니다. 필요한 의존성 문자열에 대한 좀더 상 세한 정보는 여러분의 플랫폼-고유의 SDK 에 나와

18

있습니다. 웹사이트 www3.symbian.com/faq.nsf 의 Symbian OS FAQ 데이터베이스에 있는 FAQ-0853 에 서도 유용한 정보를 제공합니다. 3. .PKG 파일을 작성할 때는, 또한 적절한 곳에 !:\ Syntax

를 사용하십시오. 일반적으로, 어플리케이션은 최종 사용자 휴대폰의 어떤 드라이브에도 설치되고 실행 될 수 있어야 합니다. C:\ 드라이브에만 설치되는 것 들(예: .INI 파일)은 거의 없어야 합니다.

디버깅 팁 1. 언제나 제일 먼저 에뮬레이터에서 디버깅하십시오.

에뮬레이터와 하드웨어에 생기는 대부분의 문제는 에뮬레이터에서 디버깅하는 것이 훨씬 쉽습니다. 2. 새로운 컨트롤 클래스를 작성하고 디버깅할 때는,

AppUi 의 ConstructL()함수에 iEikonEnv>WsSession().SetAutoFlush(ETrue)를 넣으 십시오. 그러면 gc draw 명령이, 윈도우 서버 클라이 언트 버퍼가 다음에 플러시 될 때가 아니라, 즉시 에 뮬레이터에 나타납니다. WSINI.INI 파일 (\epoc32\release\winscw\udeb\system\data\)을 편집 해 키워드 FLICKERFREEREDRAW 가 존재하지 않도록 확실히 하십시오. 그러면 draw code 를 한 단계씩 체 크하며 각 라인에 미치는 영향을 볼 수 있습니다. 그러나, 이 라인이 Release 되는 소프트웨어에게는들

19

어가지 않도록 조심하십시오. 효율성에 영향이 있습 니다. 3. 소스 파일에 정기적으로 LeaveScan 툴을 실행하십시

오. 그러면 Leave 가능한 코드의 모든 함수들을 체크 하고, 트레일링 L 이 없을 경우 에러 리포트를 해, 소 스에 있는 잠재적인 Bug 나 누락부분를 알려줍니다. 이것은 어느 코드를 잠재적으로 Leave 로 할 수 있는 지 체크하고, 우발사건을 제대로 처리하도록 하는 데 유용합니다. 툴을 다운로드 하거나 상세한 정보 를 원하는 경우에는 www3.symbian.com/faq.nsf 의 Symbian OS FAQ 데이터베이스에 있는 FAQ-0291 을 참조하십시오. 4. 메모리 누출로 인해 종료 시 어플리케이션이 패닉

상태가 되면, MS Visual Studio 에서 누출된 주소를 CBase* 로 Casting 하면 누출된 객체의 타입을 종종 알 수 있습니다. 5. Symbian OS 개발자가 구입 가능하도록 최근에 추가

된 중요한 기능은 On-target debugging 입니다. 이 기 능은 현재로서는 모든 SDK 와 툴 종류에는 사용할 수 없지만, 대부분의 최신 SDK 와 IDE Release 들은 이 기 능을 지원합니다. 가용한 경우에는, 어플리케이션을 Release 하기 전에 이 기능을 사용해서 휴대폰에 관련 된 모든 결함을 찾아내도록 권장합니다. 좀더 상세한 정보는 SDK 나 IDE 문서를 참고하십시오.

20

6. 아래과 같이 “Just in Time” 디버깅이 Enable 되어 있

는 지 확인하십시오: • \epoc32\data\epoc.ini 에서 아래 마크로가 제거되었는 지 확인: JustInTime 0 • 다음 레지스트리 값 설정: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ Windows NT\CurrentVersion\AeDebug] "UserDebuggerHotKey"=dword:00000000 "Debugger"="\"C:\\apps\\Metrowerks\\bin\ \IDE.exe\" -p %ld -e %ld" "Auto"="0" 7. %Temp%epocwind.out 에서 디버그 메시지를 검토하

십시오. 8. Lint, Leavesan, HookLogger, Panix, D_EXC 등 사용할 수

있는 개발자 툴을 사용해 메모리 누출 및 기타 에러 를 디버깅 하십시오. 이들뿐만 아니라 다른 유용한 툴들을 Symbian Developer Network (http://developer.symbian.com/main/tools)에서 다운 로드 할 수 있습니다. 9. FAQ-1344 에 Platform Security

(KErrPermissionDenied)위반을 디버깅하는 진 단 방법이 나와 있습니다 – 그렇게 하면 놓친 Capability 들을 쉽게 확인할 수 있습니다.

21

참고문헌 [1]

Symbian Developer Network newsletter

http://developer.symbian.com/main/getstarted/newsletterarchive/ index.jsp [2]

Symbian OS FAQ database

http://developer.symbian.com/main/academy/faqs/index.jsp [3]

Symbian OS C++ Coding Standards paper

http://developer.symbian.com/main/oslibrary [4]

Coding Idioms paper

http://developer.symbian.com/main/oslibrary [5]

Symbian Press

http://developer.symbian.com/main/academy/press/index.jsp [6]

Games Writing paper

http://www.symbian.com/developer/techlib/papers/porting_3D_ games/XenGames_paper.pdf [7]

Active Objects paper

http://nds2.ncsp.nokia.com/download/?asset_id=11981;ref=symbian or http://www.forum.nokia.com/main/1,,1_32_10_5,00.html

22

개발자 자원 Symbian Developer Network http://developer.symbian.com

Symbian OS Tools Providers http://developer.symbian.com/main/tools

Sony Ericsson Developer World http://developer.sonyericsson.com

Forum Nokia http://forum.nokia.com

Sun Microsystems Developer Services http://developer.java.sun.com

개발자 설문조사 Symbian 에게 영향을 미칠 수 있는 5 분 Symbian 은 당사의 개발자 지원에 대한 여러분의 생각을 알고 싶습니다. 당사는 당사 지원 프로그램 개발에 사용될 설문조사를 하고 있습니다. 여러분이 당사 결정에 영향을 주기를 원하시거나, Symbian Press 서적 시리즈를 탈 수 있는 기회를 원하신 다면, 다음 웹사이트를 방문하십시오:

http://developer.symbian.com 그리고 설문지를 작성해 주십시오.

New from

Symbian OS Platform Security 는 …Symbian OS 보안 모델과 Symbian Signed 같은 관련 Symbian 이니셔티 브를 보여주는 내용으로 Licensee 에 서 ISV 까지 모든 개발자 청중들을 위한 필독서임을 입증할 것입니다.

Accredited Symbian Developer Primer “Accredited Symbian Developer Primer” 는 ASD 시험을 통과해서 공인 Symbian 개발자가 되기 위한 공식 지침서입 니다. 이 책은 산업 전문가가 저작 해서 간결 명료하게 설명되어 있습 니다.

Symbian Press: http://developer.symbian.com/main/academy/press

Also from

모든 Symbian OS C++ 개발자용: Developing Software for Symbian OS 저자: Steve Babin Symbian OS C++ for Mobile Phones – Volume 1 저자: Richard Harrison Symbian OS C++ for Mobile Phones – Volume 2 저자: Richard Harrison Symbian OS Explained 저자: Jo Stichbury Symbian OS Internals 저자: Jane Sales

Also from

기업체 및 IT 전문가용: Rapid Mobile Enterprise Development for Symbian OS 저자: Ewan Spence

Symbian OS 프로젝트 매니저용: Symbian for Software Leaders 저자: David Wood

Connectivity 어플리케이션 개발자용: Programming PC Connectivity Applications for Symbian OS 저자: Ian McDowall

Java 개발자용: Programming Java 2 Micro Edition for Symbian OS 저자: Martin de Jode

Also from

출판된 책자 Coding tips Signing tips Getting started Performance Tips Essential UIQ – Getting Started

번역된 책자 Getting Started, Chinese Coding Tips, Chinese Essential UIQ – Getting Started, Chinese Performance Tips, Chinese Coding Tips, Japanese Performance Tips, Japanese

필수 Symbian OS

코딩 팁 설계

코딩

테스트

디버깅

이 미니 책자는 설계에서 디버깅까지 어플리케이 션 생산을 단계적으로 다루면서, 고품질 Symbian OS 소프트웨어 생산을 위한 자문을 제공합니다. 코딩 팁은 필수 Symbian OS 시리즈의 하나입니다: 이 시리즈는 간편하게 Symbian OS 개발자들에게 정보를 제공하도록 계획되었습니다.

Symbian Press Symbian Press 는 Symbian OS 와 관련 기술에 대 해 적시에 권위 있고 실용적인 관련 정보를 제공 하는 책자를 출판합니다. Symbian Press 시리즈 에 대한 정보는 http://developer.symbian.com/main/academy/press 에서 찾을 수 있습니다.

Related Documents


More Documents from "Symbian"