linguagens de programação de computador contam com uma estrutura de dados de pilha de chamada --- alguns fazem sua presença explícita para o programador, enquanto todos contam com uma pilha para o programa de saltos que deve retornar para o local onde o programa original parou depois ter executado algum tipo de sub-rotina. Antes de transferir o controle para o código do usuário , um programa define o tamanho máximo para a pilha de chamadas , entre outras preparações . Por vezes, um programa anula por causa de uma falha de segmentação , o que pode ser causado por uma variedade de factores . Você pode facilmente detectar é um estouro de pilha está na raiz do problema, usando um depurador. Coisas que você precisa
código-fonte para o programa
Compiler para o programa
de nível Fonte depurador com suporte para exibir um rastreamento
Mostrar Mais instruções
1
recompilar o programa que está dando a falha de segmentação para que todos os símbolos de depuração estão ligados a ele. Por exemplo, para um programa em C + + em qualquer sistema operacional GNU com o conjunto de ferramentas , execute:
" g+ +- g programa program.c -o ", onde a opção
" - g" instrui o compilador para incluir símbolos de depuração .
2
Execute o programa até parar devido a uma falha de segmentação . Para o exemplo , execute:
" programa "
3
Invocar o depurador no programa logo após a falha de segmentação . Para o exemplo , execute:
" programa gdb "
4
Apresentar um rastreamento usando o depurador. Todos os depuradores de nível de fonte têm a capacidade de exibir a cadeia de invocações de função aninhada no momento do acidente programa. Para o nosso " gdb " exemplo, entrar dentro " gdb : "
" backtrace "
5
Examine o backtrace por sinais de uma recursão infinita . É um único nome da função repetida mais vezes do que o necessário antes do acidente ? Algumas funções que chamam uns aos outros ( por exemplo , a recursão mútua) muitas vezes antes do acidente ? Se a resposta a qualquer pergunta é "sim", o programa parou por causa de um estouro de pilha . A causa mais provável de estouros de pilha em linguagens de alto nível são incorretamente codificado casos base .