데비안에서 디버깅을 위한 소스 코드 위치는 무엇입니까?

데비안에서 디버깅을 위한 소스 코드 위치는 무엇입니까?

데비안에서디버그 패키지, 두 부분으로 구성된 실행 파일을 생성할 때 실행 파일의 디버깅 정보 파일이 들어간다는 것을 알고 있습니다 /usr/lib/debug(즉, 실행 파일의 기호를 제거하여 별도의 파일에 넣습니다).

그러나 기호 파일은 소스 파일을 참조하므로 소스 파일을 어디에 배치해야 할지 모르겠습니다. Red Hat/Fedora에서는 해당 위치가 어디에 있는지 알고 있습니다 /usr/src/debug(Fedora의 설명에 따르면).포장: 디버깅 정보).

데비안에서 디버깅을 위한 소스 파일은 어디에 배치해야 합니까?


구체적인 예는 Crypto++입니다. GNUMakefile다음을 추가하는 패치가 있습니다 .

IS_DEBIAN = $(shell uname -a 2>&1 | $(EGREP) -i -c "debian|ubuntu|mint")
...

# https://wiki.debian.org/DebugPackage
ifeq ($(IS_DEBIAN),1)
  DEBUG_SYM_DIR ?= /usr/lib/debug/cryptopp
  DEBUG_SRC_DIR ?= /usr/src/debug/cryptopp
endif
...

그러면 다음과 같은 상징적인 레시피가 있습니다.

symbol symbols:
    $(MKDIR) -p $(DEBUG_SYM_DIR) $(DEBUG_SRC_DIR)
    -objcopy --only-keep-debug cryptest.exe cryptest.exe.debug
    -objcopy --only-keep-debug libcryptopp.so libcryptopp.so.debug
    -strip --strip-debug --strip-unneeded cryptest.exe
    -strip --strip-debug --strip-unneeded libcryptopp.so
    -$(CP) cryptest.exe.debug $(DEBUG_SYM_DIR)/
    -$(CP) libcryptopp.so.debug $(DEBUG_SYM_DIR)/
    -objcopy --add-gnu-debuglink=$(DEBUG_SYM_DIR)/cryptest.exe.debug cryptest.exe
    -objcopy --add-gnu-debuglink=$(DEBUG_SYM_DIR)/libcryptopp.so.debug libcryptopp.so
    -$(CP) *.h *.cpp $(DEBUG_SRC_DIR)/

따라서 작업 흐름은 다음과 같습니다.

cd cryptopp
make static dynamic test
sudo make symbols
sudo make install

관련이 있지만 관련이 없음(누가 댓글을 달고 싶은 경우): 다른 레시피의 종속성으로 기호를 추가할 수 없거나 단지 make symbols버그 때문 입니다 objcopy(버그라고 생각합니다. 참조).Binutil 버그 18064 - objcopy, add-gnu-debuglink 및 "디버그 링크 섹션을 채울 수 없습니다.").

답변1

데비안 바이너리 패키지에는 소스 코드가 포함되어 있지 않습니다. 단, 소스 코드를 사용하여 다른 패키지를 빌드할 수 있는 드문 경우는 예외입니다(예를 들어 liblzo2-devfor minilzo.c등 ) 또는 많은 사용자가 소스 코드(예: 커널 소스 코드) binutils-sourcegcc-4.9-source쉽게 설치할 수 있기를 원합니다. 소스코드는 에서 제공하는 소스코드 패키지 형태로 제공됩니다 dpkg-buildpackage.

apt-get source귀하의 경우 데비안 패키지 소스 코드를 설치하는 방법은 다음과 같습니다.

apt-get source cryptopp

사용자는 쓰기 액세스 권한이 있는 어디에서나 이 작업을 수행할 수 있습니다. 즉, 정식 소스 위치가 없습니다. 또한 패키지는 어디에서나 빌드할 수 있으므로 패키지가 저장된 소스 위치도 변경될 수 있습니다... (데비안에는 다음과 같은 흥미로운 기능이 있습니다. /usr/src그룹에 속하고 그룹 쓰기가 가능하므로 그룹 src의 모든 사용자는 ) 에서 소스 코드를 제공하는 바이너리 패키지를 설치 src하지 않고 이 디렉터리를 사용할 수 있습니다 .root/usr/src

따라서 데비안에서 해당 소스코드가 포함된 디버그 패키지를 사용하려면 디버그 패키지를 설치하고 위와 같이 일치하는 소스코드를 구한 후 and 문을 gdb사용하여 일치하는 방법을 알려주어야 합니다 .directoryset substitute-pathgdb 문서더 알아보기).

패키징 측면에서는 소스 패키지가 알아서 처리하고, 사용하면 debhelper디버그 패키지도 알아서 처리해줍니다(9.20151219 버전 기준).

관련 정보