Depurando uma falha de segmentação

6

Eu tenho um aplicativo que é executado em um dispositivo Linux incorporado que estou expandindo com novos recursos. Os novos recursos exigem o GLib, portanto, estou vinculando dinamicamente as bibliotecas necessárias ao aplicativo.

Quando faço isso e executo o aplicativo no dispositivo, recebo uma falha de segmentação. Isso ocorre quando eu vinculo dinamicamente as novas bibliotecas. O backtrace do GDB mostra que a falha ocorre em outra biblioteca personalizada vinculada dinamicamente. Infelizmente, só recebo um traço parcial com a seguinte mensagem:

Backtrace stopped: frame did not save the PC

Observe que estou vinculando apenas outra biblioteca compartilhada e não adicionando nenhum código novo. Se eu vinculei a biblioteca personalizada estaticamente, a falha desaparece. Eu suspeito que uma corrupção de memória está acontecendo em algum outro lugar e as condições (ou seja, mapeamento de memória) estão corretas quando a biblioteca personalizada é dinamicamente vinculada para que a segmentação ocorra.

Alguém sabe de alguma boa ferramenta e técnica que eu possa usar para depurar ainda mais?

    
por waffleman 15.08.2012 / 17:44

1 resposta

2

Houve uma discussão sobre assuntos semelhantes em Gmane e

Além disso, sugiro começar com a aparência de que seu programa em tempo de execução carregará as bibliotecas corretas, então tente ldd do arquivo vinculado dinamicamente para ver se você está realmente executando em versões corretas e, em seguida, execute o programa em valgrind porque é totalmente possível que você esteja endereçando memória que não deveria e valgrind será capaz de mostrar isso a você.

    
por 16.08.2012 / 15:14