Localização do código fonte para depuração no Debian?

5

Do DebugPackage do Debian, eu sei que o arquivo de informações de depuração para um executável vai em /usr/lib/debug ao criar executáveis de duas partes (ie , removendo o executável de seus símbolos e colocando-os em um arquivo separado).

No entanto, o arquivo de símbolo se referirá aos arquivos de origem e não vejo onde os arquivos de origem devem ser colocados. No Red Hat / Fedora, eu sei que eles estão localizados em /usr/src/debug (de acordo com o Packaging: Debuginfo ) do Fedora.

Onde eu coloco arquivos fonte para depuração no Debian?

Um exemplo concreto é o Crypto ++. Eu tenho um patch para seu GNUMakefile que adiciona o seguinte:

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
...

E então há uma receita de símbolo assim:

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)/

Portanto, o fluxo de trabalho é:

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

Relacionado, mas não relevante (caso alguém queira comentar): Eu não posso adicionar símbolos como uma dependência para outra receita ou apenas make symbols por causa de um bug em objcopy (eu acredito que seja um bug - veja Binutil Bug 18064 - objcopy, add-gnu-debuglink e "não é possível preencher a seção de link de depuração" ).

    
por jww 01.03.2015 / 03:31

1 resposta

5

Os pacotes binários da Debian não incluem o código-fonte, exceto em alguns casos em que o código fonte é útil para construir outros pacotes ( por exemplo, liblzo2-dev para minilzo.c ou binutils-source , gcc-4.9-source etc. para construir toolchains), ou onde muitos usuários esperam poder instalar a fonte facilmente (a fonte do kernel, por exemplo). A origem é enviada em um pacote de origem, criado automaticamente por dpkg-buildpackage .

A maneira de instalar o código-fonte dos pacotes Debian é usar apt-get source ; no seu caso

apt-get source cryptopp

Os usuários podem fazer isso em qualquer lugar em que tenham acesso de gravação, o que significa que não há nenhum local de origem canônico. Além disso, como os pacotes podem ser construídos em qualquer lugar, a localização da fonte armazenada pode mudar também ... (Existe uma característica interessante no Debian que pode ajudar: /usr/src pertence ao grupo src e é gravável em grupo, portanto, qualquer usuário no grupo src pode usar esse diretório sem ser root . Os pacotes binários que fornecem o código-fonte instalam o código-fonte em /usr/src .

Então, para usar pacotes de depuração no Debian com o código-fonte correspondente, você precisa instalar o pacote de depuração, obter o código-fonte correspondente acima e informar gdb como fazer as combinações com directory e set substitute-path declarações (consulte a documentação do gdb para obter detalhes).

No lado da embalagem, o pacote fonte cuida de si mesmo, e se você estiver usando debhelper , o pacote de depuração também cuida de si mesmo (desde a versão 9.20151219).

    
por 01.03.2015 / 18:44