C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[25246] Re:RAD Studio 10 Seattle C++11 32bit... Code Guard와 디버깅 문제
빌더(TWx) [builder] 6274 읽음    2015-09-05 15:25
.. 님이 쓰신 글 :
: RAD Studio 10 Seattle이 새로 나왔고, C++11 32bit 지원한다는 소식을 듣고 설치해서 사용해 보았는데 실망스럽네요.
: 기존 컴파일러와 C++11 32bit 컴파일러 두개가 있고, 컴파일 옵션에서 선택하게 되어있더군요.
:
: C++11 32bit 컴파일러로 선택하고 컴파일 실행 잘됩니다.
:
: 그러나, 컴파일 옵션에서 Code Guard 옵션을 주고 컴파일 할때, Link with Dynamic RTL을 true로 하지 않으면
: 링크 에러가 납니다. Gode Guard용 static 라이브러리에 몇가지 함수들이 빠진채 배포 된 것 같습니다.
: Dynamic RTL을 사용하면 컴파일 링크도 잘되지만, 실행하면 원인 모를 예외가 발생하면서 프로그램이 죽더군요.
:
: 메모리 누수 체크 할 때 Code Guard 기능이 매우 유용한데 써먹을 수 없네요
: 왜 이런 버그를 그대로 방치한 채 배포한 건지 도무지 이해가 안가네요. -_-
:
: 그리고 C++11 32bit 컴파일러로 C++ 프로젝트에서 파스칼 소스코드 디버깅은 잘되더군요.
: 그렇지만 64bit 에선 여전히 C++ 프로젝트에서 파스칼 소스코드 디버깅이 전혀 안됩니다.
:
: 둘다 같은 clang 기반의 C++11 컴파일런데 32비트에선 되고, 64트에선 안되는 이유가 납득이 되질 않네요
:
: 기대를 많이 했는데 여전히 실망스럽네요 -_-;;;
:
:
:





clang 컴파일러에서 Exception 처리 방식은...

64비트에선 64bit SEH 방식이(Exception 테이블 이용하는 구조) 사용되고...
32비트에선 SjLj 방식이나, dwarf 구조를 이용한 두가지 방식중 하나를 선택해서 사용할 수 있는데...

clang을 그대로 포팅한 RAD Studio 10 Seattle 32비트 C++11 컴파일러는 SjLj 구조의 Exception 처리 방식을 사용 합니다.

SjLj 방식은 OS 콜벡함수하고 같이 사용할 수 있지만, 기존의 C언어에서의 setjmp/longjmp CRT 함수를 모방하는 방식으로
구현되어 있기 때문에 퍼포먼스가 매우 느립니다. (스텍정보, 레지스터 정보등의 Context를 setjmp/longjmp 버퍼에 매번
저장하고 리스토어 하는 식으로 구현되기 때문)


32비트 C++11 컴파일러에서 Code Guard 기능을 사용할 수 없는 것은

기존 엠바가 32비트에서 처리하고 있는 Exception 처리방식과 32비트 C++11 컴파일러에서 사용되는 예외처리 방식이 다른데..
엠바가 아직 까지 Code Guard와 호환되도록 라이브러리를 완성하지 못했기 때문 입니다.


오픈소스 컴파일러인 clang을 포팅해서 C++11 32비트와 64비트 컴파일러를 만들었지만...

C++11 32비트 컴파일러는 오브젝트 파일 포맷으로 OMF를 쓰고, 디버깅 정보 포맷은 기존의 TD32 포맷을 사용합니다.
32비트 델파이 역시 디버깅 정보 포맷으로 옛날 터보 디버거 형식의 TD32 포맷을 사용하기 때문에 32비트 C++11 프로젝트에서
파스칼 소스레벨 디버깅이 가능한 거고요...

64비트 C++11 컴파일러는 오브젝트 파일 포맷으로 ELF, 디버깅 정보 포맷으로 DWARF를 사용하는데...
64비트 델파이 컴파일러에 DWARF 디버깅 포맷을 생성하는 기능이 아예 구현되어 있지 않아서, 64비트 C++ 프로젝트에서는
파스칼 소스레벨 디버깅이 안되는 겁니다.

64비트 C++ 컴파일러가 처음 나왔던 때가 XE2 인데... 지금 까지도 엠바는 델파이 컴파일러를 손 볼 의지가 전혀 없는 듯.


64비트에선 ELF, DWARF 포맷을 쓰고...
32비트에선 도스시절에서나 사용됐던 OMF, 터보 디버거 TD32 포맷을 쓰고...

엠바 툴의 모습을 보면...
뭔가 완성도를 목표로 고심 끝에 디자인 해서 컴파일러 툴이 만들어 졌다기 보단...
일단 제품을 내고 보자는 식으로... 이거 저거 짜집기 해서 엉성하게 만들어 지고 있다는 느낌이 강하네요.

아키텍쳐 디자인을 변경해서 IDE를 안정적으로 만들었다고 설레발 치지만... RAD Studio 10 Seattle 에서도 IDE 버그는 여전합니다.

50대 중반이 되도록 JAVA, C#, C++ 등의 랭귀지를 이용하는 여러가지 개발 툴을 수십년 동안 다루어 보았지만...
엠바 툴 처럼 이렇게 버그가 많고.. 엉성하기 짝이 없는 툴은 난생 처음 봅니다.



bugfree [bugfree]   2015-09-06 22:06 X
Rad 10 Seattle도 64bit C++ 프로젝트에선
파스칼 소스코드 디버깅이 지원 안되는군요
bugfree [bugfree]   2015-09-06 22:12 X
64bit 델파이 프로젝트에선 C++ 소스를 사용할순 없어도
디버깅 되는걸 보면 64bit C++ 프로젝트에서 파스칼 소스코드 디버깅 되게 만들가 어렵지 않을텐데 왜 지원을
않할까요 답답 합니다

+ -

관련 글 리스트
25242 RAD Studio 10 Seattle C++11 32bit 잠깐 사용기, 버그는 여전히 -_- .. 5637 2015/09/02
25246     Re:RAD Studio 10 Seattle C++11 32bit... Code Guard와 디버깅 문제 빌더(TWx) 6274 2015/09/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.