C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[74731] Re:컴파일러 고수 분. RAD 10.2 64비트 디버거 버그인가요?
빌더(TWx) [builder] 3336 읽음    2018-01-12 21:20
기영테크 님이 쓰신 글 :
:
:
: 안녕하세요
:
: RAD 10.2.2 토쿄 버전 쓰고있는데요
: 64비트 스타트업 코드부터 소스레벨 디버깅 해보려고
:
: nasm -t -f elf64 -g -F dwarf -D_MT -D_MBCS -D_MBC_USE_MACROS -DCONSOLE c0nt64.nasm -o c0x64.o
:
: 위와 같이 -g -F dwarf 디버깅 옵션 줘서 컴파일 링크해 보았는데요
:
: c0nt64.nasm 의 스타트업 코드에 int3 브레이크 코드를 넣어서 컴파일 링크하니까
: 어셈블러 스타트업 코드에서 브레이크가 걸리더군요.
:
: 그런데 dwarf 디버깅 정보 옵션을 주었는데도 기계어 레벨로만 디버깅이 되고
: 소스레벨 디버깅이 안되더군요
:
: 심지어 C++ 소스레벨 디버깅도 덩달아 같이 먹통 되던데요
:
: 제가 옵션을 잘못 준 걸까요?
: 아님 64비트 디버거 버그인 건가요?
:
: 어떻게 해야 어셈블러 스타트업 코드를 소스레벨에서 디버깅 할 수 있을까요
:
: 물론 C++ 소스코드레벨 디버깅이 먹통되는 희안한 현상도 막으면서 말이죠
:
: 컴파일러 고수 분
: 알려주시면 고맙겠습니다



답변:


C++ 빌더의 64 비트 컴파일러는 디버깅 포맷으로 dwarf 포맷을 사용하고 있고
nasm 어셈블러 옵션도 아주 훌륭하게 설정되어 있습니다.

옵션을 제대로 설정했음에도 불구하고... 
Start-up 코드인 c0nt64.nasm 소스레벨 디버깅이 안되는 이유는...

dwarf 디버깅 포맷의 버전이 다르기 때문 입니다.


C++빌더의 64비트 C++ 컴파일가 생성하는 dwarf 디버깅 포맷 버전은 나온지 오래된 dwarf v2 버전이고
nasm 어셈블러가 생성하는 dwarf 디버깅 포맷 버전은 dwarf v3을 코드베이스로 사용하기 때문 입니다.

엠바 애들이 매너리즘에 빠져있는 건지, 아님 게을러 터진 건지...
몇년 째 계속 clang 포팅 C++ 컴파일러도 3.3 코드베이스에 머물러 있고 (clang/llvm 헤드는 7.0),
현재 dwarf v5 디버깅 포맷이 사용되고 있는데 엠바 애들은 아직까지 dwarf v2 를 사용하고 있습니다.


c0nt64.nasm 파일의 소스레벨 디버깅을 가능하게 하려면...

nasm 어셈블러 프로그램을 dwarf v2 디버깅 포맷으로 생성하도록 프로그램을 수정해야 합니다.
dwarf 포맷이 복잡하긴 하지만 다루어 본 경험이 있으면 코드 수정이 어렵진 않을 겁니다.

그리고...

dwarf 2 포맷으로 생성하도록 nasm 어셈블러를 수정하더라도
C++ 소스레벨 디버깅 까지 포함해서 가능하게 하려면 엠바 C++ 64 비트 컴파일러를 해킹해서
표준 스펙을 벗어난 디버깅 정보 Internal 을 알아내야 할 지도 모릅니다.

링크 과정에서 링커가 오브젝트 파일들과 라이브러리 파일들의 디버깅 정보를 하나의 단일 단위로
묶어서 머지를 할텐데, 포맷의 상이함이 발견되면 머지를 하지 않을 수도 있기 때문이죠.

여튼 뭐...

dwarf 디버깅 포맷이 복잡하긴 하지만, 다루어 본 경험이 있으면 nasm 어셈블러를 수정해서 작업하면 됩니다.
nasm 어셈블러가 오픈소스 이니...

+ -

관련 글 리스트
74728 컴파일러 고수 분. RAD 10.2 64비트 디버거 버그인가요? 기영테크 3269 2018/01/12
74731     Re:컴파일러 고수 분. RAD 10.2 64비트 디버거 버그인가요? 빌더(TWx) 3336 2018/01/12
74732         Re:Re:컴파일러 고수 분. RAD 10.2 64비트 디버거 버그인가요? 기영테크 3280 2018/01/13
74736             Re:Re:Re: 64비트 c0nt64.nasm 소스레벨 디버깅 가능하게 하기 빌더(TWx) 3759 2018/01/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.