정적 라이브러리 디버그 기호
VS2010에는 링커 아래에 exes / dll에 대한 디버그 정보를 생성하는 옵션이 있지만 librarian 에는 이러한 옵션이 없습니다 . 디버그 정보가 정적 라이브러리에 포함되어 있습니까?
libs, exes 및 dll에 대한 프로그램 데이터베이스 파일 이름에 대한 C / C ++ 속성에 옵션이 있습니다 . 기본적으로 내 중간 디렉터리로 이동하여 libs의 프로젝트 이름이 지정되지만 exes / dll의 경우 vc $ (PlatformToolsetVersion) .pdb 로 이름이 지정 됩니다. 이 옵션의 pdb는 무엇이며 링커 옵션의 pdb와 어떻게 다릅니 까?
라이브러리에 라이브러리와 헤더를 제공하는 경우 라이브러리 사용자에게 디버그 기호를 어떻게 제공합니까?
당신이 사용하는 경우 /ZI
또는 /Zi
( C/C++
-> General
-> Debug Information Format
), 다음이 vc$(PlatformToolsetVersion).pdb
의 모든 디버그 정보를 포함하는 생성됩니다 .obj
생성 된 파일을. 또는을 사용 /Z7
하는 경우 디버그 정보가 .obj
파일에 포함 된 다음 .lib
. 이것은 아마도 정적 라이브러리에 대한 디버그 정보를 배포하는 가장 쉬운 방법 일 것입니다 .
그러나 정적 라이브러리를 배포하는 것은 일반적으로 특정 버전의 컴파일러에 연결되어 있기 때문에 권장하지 않습니다.
전체 방법이 필요한 사람들을 위해 이전 답변을 확장합니다 (VS 2013).
이것은 VS2013 문제에 관한 위의 의견을 다루어야합니다.
방법 1 : 프로그램 데이터베이스 (.pdb) 방식 (/ Zi 또는 / ZI)
정적 라이브러리 프로젝트 : 정적 라이브러리 와 동일한 이름으로 pdb를 생성합니다.
- 메뉴
Solution Explorer
에서 엽니 다View
. - 정적 lib 프로젝트를 마우스 오른쪽 버튼으로 클릭하고
Properties
- 편집
Configuration Properties
->C/C++
->General
->Debug Information
에/Zi
나/ZI
/ZI
디버깅 중에 "편집 및 계속"편집 을 허용합니다.
- 편집
Configuration Properties
->C/C++
->Output Files
->Program Database File Name
에$(OutDir)$(TargetName).pdb
- 이제 컴파일하고 YourLib.lib 및 YourLib.pdb가 어디에 있는지 확인하십시오.
- 메뉴
응용 프로그램 프로젝트 : 실행 파일을 정적 lib 및 새 PDB 파일과 연결합니다 .
- 다시 프로젝트 속성으로 이동하지만 이번에는 애플리케이션 프로젝트에 대해
- 다시,
Debug Information
필요에 따라 속성을 편집 합니다. - 편집
Configuration Properties
->Linker
->General
->Additional Library Directories
, 자신의 "libs"디렉토리를 추가하거나 YourLib.lib 및 YourLib.pdb 파일을 유지 / 복사하려는 디렉토리를 추가하십시오. - 편집
Configuration Properties
->Linker
->Input
->Additional Dependencies
, 추가YourLib.lib
(앞에 경로 없음) - 이제 YourLib.lib 와 YourLib.pdb 를 위에서 지정한 디렉토리에 복사하십시오 .
방법 2 : 포함 된 기호 (.pdb 없음) 방식 (/ Z7)
정적 라이브러리 프로젝트 : 디버그 기호가 포함 된 정적 라이브러리 생성
- 방법 1에서와 같이 프로젝트 속성으로 이동합니다.
- 방법 1에서와 같이, 당신을 수정
Debug Information
, 하지만이 시간에/Z7
- 방법 1에서와 같이 YourLib.lib가 생성되는 위치를 컴파일하고 기록하십시오.
애플리케이션 프로젝트 : 실행 파일을 정적 라이브러리와 연결
- 방법 1에서와 같이 프로젝트 속성으로 이동합니다.
- 방법 1에서
Debug Information
와 같이 필요에 따라 속성을 수정합니다. - 방법 1에서와 같이 편집
Additional Library Directories
- 방법 1에서와 같이 편집
Additional Dependencies
- 이제 YourLib.lib를 다음에 지정된 디렉토리에 복사하십시오.
Additional Library Directories
토론:
- Z7의 장점? 더 간단하고 "단일 파일"방식입니다. 모든 디버그 정보는 lib 파일에 있습니다.
- Z7의 단점? 디스크상의 파일 크기, 링크 시간, "최소 재 구축"(/ Gm) 기능과 호환 되지 않음 , "편집 및 계속"을 허용 하지 않음 , 이전 형식 (예 : 이전 패러다임)
Debug Information
애플리케이션 프로젝트에 대한 설정을 지정하지 않는 이유는 무엇 입니까? 이 게시물은 정적 lib 코드에서 디버그 작업을 수행하는 방법에 관한 것입니다. 동일한 "방법 1 대 방법 2"선택이 응용 프로그램 프로젝트에도 적용됩니다.
VS2013에서는 C / C ++ 출력 파일 탭에서 프로그램 데이터베이스 파일 이름을 설정할 수 있습니다. 기본값에서 $ (OutDir) $ (TargetName) .pdb 와 같은 것으로 변경 하면 문제가 해결됩니다.
정적 라이브러리는이를 사용하는 프로그램에 구현됩니다.
이를 사용하는 프로그램이 디버그 기호를 사용하는 경우 해당 프로그램의 컴파일 된 라이브러리 코드에도 기호가 있습니다.
wikipedia의 PDB 정보 :
디버그 기호가 바이너리 자체에 포함되면 파일이 상당히 커질 수 있습니다 (때로는 몇 메가 바이트까지). 이러한 추가 크기를 피하기 위해 최신 컴파일러와 초기 메인 프레임 디버깅 시스템은 기호 정보를 별도의 파일로 출력합니다. Microsoft 컴파일러의 경우이 파일을 PDB 파일이라고합니다.
VS2012의 이상한 행동. 처음부터 빌드 (또는 nmake의 / A 옵션 사용)하면 .pdb 파일이 생성됩니다. 이제 .lib 및 .pdb를 삭제하고 nmake를 다시 실행하면 (물론 링크 만 실행하려면 / A없이) .pdb 파일이 출력되지 않습니다.
참고 URL : https://stackoverflow.com/questions/7575298/static-library-debug-symbols
'Nice programing' 카테고리의 다른 글
Eclipse가 Maven 종속성을 업데이트하는 데 시간이 오래 걸리는 이유는 무엇입니까? (0) | 2020.11.24 |
---|---|
번들 설치를 실행할 때 gem 설치를위한 매개 변수를 어떻게 전달할 수 있습니까? (0) | 2020.11.24 |
자바 스크립트에서 유효하지 않은 필드를 표시 할 수 있습니까? (0) | 2020.11.24 |
구성 전에 개체 참조 보내기 (0) | 2020.11.24 |
장고 뷰에 대한 단위 테스트를 작성하는 방법은 무엇입니까? (0) | 2020.11.24 |