Arquivos principais quando os símbolos são removidos

2

Estou construindo uma aplicação usando o g ++ 4.3. Eu estou usando o nível máximo de otimização possível, não usando a opção -g , e estou retirando os símbolos depois que ele é construído.

Se eu não remover os símbolos do meu aplicativo e das bibliotecas, os arquivos principais ainda serão úteis? (Quando eles são gerados quando o aplicativo falha.)

Os arquivos principais serão úteis se eu compilar meu aplicativo com a máxima otimização possível? (Sem -g opção e sem decapagem de símbolos.)

    
por BЈовић 09.06.2011 / 11:57

1 resposta

4

De um modo geral, um arquivo principal é um despejo de toda a memória usada por um processo, mais o estado de registradores da CPU. Assim, em geral, as informações que você pode recuperar de um arquivo principal são as mesmas que você pode obter ao anexar um depurador ao processo antes que ele caia.

Se eu faço não tira os símbolos do meu aplicativo e das minhas bibliotecas, os arquivos principais ainda são úteis?

Na página da Wikipedia Core dump :

'' Em sistemas operacionais modernos semelhantes ao Unix, administradores e   programadores podem ler arquivos core dump usando o GNU Binutils Binary   Biblioteca de Descritores de Arquivos (BFD), [...] Esta biblioteca fornecerá o arquivo   dados brutos para um determinado endereço em uma região de memória de um dump de núcleo; isto   não sabe nada sobre variáveis ou estruturas de dados em que   região de memória, então o aplicativo usando a biblioteca para ler o núcleo   despejo terá que determinar os endereços das variáveis e determinar   o layout das estruturas de dados em si, por exemplo, usando o   tabela de símbolos para o programa que está sendo depurado. ''

Portanto, a resposta para a sua primeira pergunta é: não, arquivos de despejo principal são de pouco uso se você tira os símbolos do executável.

No entanto, os símbolos ocupam apenas algum espaço em disco e, de outra forma, não afetar o desempenho: você pode compilar com otimização máxima e -g ao mesmo tempo.

Os arquivos principais serão úteis se eu compilar meu aplicativo com a máxima otimização possível?

Como um arquivo principal é apenas um despejo da memória e o estado do processador quando seu aplicativo falhou, o aviso geral sobre otimização e a depuração se aplica: um depurador só encontrará informações (por exemplo, o valor de uma variável, ou uma chamada de função em um backtrace de pilha) se não foi otimizado.

    
por 09.06.2011 / 13:51