데비안에서디버그 패키지, 두 부분으로 구성된 실행 파일을 생성할 때 실행 파일의 디버깅 정보 파일이 들어간다는 것을 알고 있습니다 /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-dev
for minilzo.c
등 ) 또는 많은 사용자가 소스 코드(예: 커널 소스 코드) binutils-source
를 gcc-4.9-source
쉽게 설치할 수 있기를 원합니다. 소스코드는 에서 제공하는 소스코드 패키지 형태로 제공됩니다 dpkg-buildpackage
.
apt-get source
귀하의 경우 데비안 패키지 소스 코드를 설치하는 방법은 다음과 같습니다.
apt-get source cryptopp
사용자는 쓰기 액세스 권한이 있는 어디에서나 이 작업을 수행할 수 있습니다. 즉, 정식 소스 위치가 없습니다. 또한 패키지는 어디에서나 빌드할 수 있으므로 패키지가 저장된 소스 위치도 변경될 수 있습니다... (데비안에는 다음과 같은 흥미로운 기능이 있습니다. /usr/src
그룹에 속하고 그룹 쓰기가 가능하므로 그룹 src
의 모든 사용자는 ) 에서 소스 코드를 제공하는 바이너리 패키지를 설치 src
하지 않고 이 디렉터리를 사용할 수 있습니다 .root
/usr/src
따라서 데비안에서 해당 소스코드가 포함된 디버그 패키지를 사용하려면 디버그 패키지를 설치하고 위와 같이 일치하는 소스코드를 구한 후 and 문을 gdb
사용하여 일치하는 방법을 알려주어야 합니다 .directory
set substitute-path
gdb 문서더 알아보기).
패키징 측면에서는 소스 패키지가 알아서 처리하고, 사용하면 debhelper
디버그 패키지도 알아서 처리해줍니다(9.20151219 버전 기준).