2016-11-04 7 views
3

지도 파일을 리소스로 추가하고 시스템을 실행할 때마다 파일을 추출하여 맵 파일이 항상 올바른지 확인하고 지원 수명을 늘리십시오. 델파이 7에서는 맵 파일을 리소스로 사용하여 프로젝트를 컴파일 할 수 있지만 맵이 잘못되었습니다. 예외가 발생하면 호출 스택이 잘못 되었기 때문입니다. 델파이 시애틀에서는 맵을 생성하기 전에 리소스를 추가하려고하기 때문에 컴파일 할 수 없습니다. 컴파일 후 쓰레기통에 파일을 추가 할 수 있다는 것을 알고 있지만, 컴파일/빌드시에 그것을 할 수있는 방법이 있습니까? 미안하지만 내가별로 구체적이지 않다면, 여기가 나의 첫 번째 질문이다. 감사. 내가 어떤 대답을 읽은 후컴파일 할 때 프로젝트의 리소스로 .map 파일을 추가하는 방법은 무엇입니까?

UPDATE

, 나는 몇 가지 조사를했다. 이미 프로젝트에서 JEDI 예외 단위를 사용하고 있었지만 JEDI 디버그 전문가를 알지 못했습니다. 그것은 내가 원하는 것 이상을 정확하게 수행합니다. JEDI 디버그 전문가는 .map 파일을 .jdbg 파일로 변환합니다.이 파일은 암호화 된 파일 맵 파일입니다 (맵은 텍스트 파일 임). 또한, jdbg 파일은 약 12 % 작아졌습니다. 그 다음지도. 바이너리 (exe)에 jdbg를 삽입하는 옵션도 있습니다. > JCL 디버그 전문가 - -> .jdbg 생성 파일 ->이 프로젝트에 사용

  • 프로젝트 -> JCL 디버그 전문가 -> 삽입 jdbg 데이터

    • 프로젝트 :이를 위해, 나는 옵션을 사용할 수 바이너리로 -> ​​JCL 디버그 전문가 - ->이 프로젝트

    • 프로젝트를 위해 사용> 변환 후지도 파일을 삭제합니다 - (파일을 삭제하려면 물론,)>

    이 프로젝트에 사용

    예를 들어 젠킨스와 같이 IDE 외부에서이 도구를 사용하려면 JEDI \ jcl \ examples \ windows \ debug \ tools \ MakeJclDbg.dpr에있는 프로젝트를 빌드해야했습니다. 빌드가 끝나면 jcl의 bin 디렉토리에 exe 파일이 생성됩니다. 사용 방법 :

    MakeJclDbg -J -E -M map_filename

    J - .JDBG 파일을

    E 만들기 - 삽입 디버그 데이터를 실행 파일

    M에 - 변환

    후 MAP 파일을 삭제

    실행 파일은 MAP 파일과 동일한 디렉토리에 있어야합니다. 이렇게하면 jdbg 파일 (맵 파일에 기반)이 생성되고 exe에 삽입되어 맵이 삭제됩니다. 이 (및 JEDI의 예외 단위로) 예외가 발생하면 스택 추적, 시스템에서 사용하는 모든 dll의 버전, 운영 체제 정보 등을 사용할 수 있으며이 모든 정보를 이메일.

    나는 Embarcadero도 jdbg 파일을 bpl로 가지고 있다는 것을 깨달았습니다. 그래서 그들은 JCL 도구도 사용한다고 생각합니다.

  • +2

    @ Jerry : * 코드 * 란 무엇입니까? 질문은 ** 리소스 **를 실행 파일에 추가하는 것에 대해 묻습니다. 코드 관련이 없습니다. 이것은 실행 파일이 빌드 될 때 링커에 의해 생성 된 맵 파일입니다. –

    +2

    @Jerry : 아니요. brcc 또는 MS rcc를 사용하여 명령 줄 또는 빌드 후 이벤트에서 추가 할 수도 있습니다. 그러나 IDE에게 코드를 요청하더라도 여전히 코드가 아닙니다. 컴파일러 지시문은 간단한'{$ R filename.ext}'입니다 –

    +3

    @Rodrigo : JEDI는 실행 파일에 맵 파일을 임베딩 할 수있는 기능과 앱에서 직접 사용할 수있는 디버그 유닛을 사용할 수 있습니다 디스크에 압축을 풀지 않아도됩니다. 다른 디버깅 도구 (예 : MadExcept 및 Eureka)도 동일한 기능을 제공합니다. 자신의 롤을 시도하는 것보다는 그 중 하나를 사용하는 것이 훨씬 쉽습니다. –

    답변

    3

    아니요, 맵 파일은 프로그램 출력이 링크 된 후에 생성됩니다. 아직 생성되지 않은 맵 파일을 리소스로 프로젝트에 통합하는 것은 불가능합니다.

    1

    당신은 요점을 놓치고 있습니다.

    맵 파일은이 실행 파일의 크기를 증가하지 않도록 에 별도의 파일로 생성됩니다. 그 파일을 리소스로 실행 파일에 다시 넣으려고하면 단순히 목적을 무효화합니다.

    사용중인 디버그 프레임 워크를 언급하지 않았습니다. 그러나 디버그 정보를 제공하는 다른 방법이 있습니다. 자세한 내용을 위해 사용하는 디버그 프레임 워크의 설명서를 참조하는 것이 좋습니다. 필자가 시도한 대부분의 프레임 워크에 적용 할 수있는 일반적인 개념을 제공 할 것입니다.

    • 확장 된 EXE 크기가 만족스럽고 실행 파일에 디버그 정보가 포함되도록하려면 다음을 수행하십시오. 맵 파일 옵션을 사용하지 마십시오. 연결 옵션을 include debug information으로 설정하기 만하면됩니다. (그리고 당신의 디버그 프레임 워크가 그것을 사용할 수 있도록하십시오.)
    • 대부분의 디버그 프레임 워크는 stack frames을 켜고 컴파일하는 것을 권장합니다. 이는 디버그 프레임 워크가 호출 스택을 쉽게 추론 할 수있게 해주기 때문에 매우 중요합니다.
    • 일부 디버깅 프레임 워크에는 누락 된 호출 스택 정보를 추측 할 수있는 기능이 있습니다. 활성화 된 경우 실제로 이해가되지 않는 스택 항목은 수동으로 무시해야합니다.
    • 물론 디버그 정보없이 컴파일 된 유닛은 최종 실행 파일에 포함시킬 디버그 정보를 갖지 않을 것입니다.
    +0

    JEDI 툴을 디버그 프레임 워크로 사용하고 있습니다. 나는 디버그 정보에 대해 몰랐다. –