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.