Pergunta

Existe uma maneira de descobrir o valor python de um PyObject * de um corefile no gdb

Foi útil?

Solução

É muito trabalho, mas é claro que pode ser feito, especialmente se você tem todos os símbolos. Olhe para os arquivos de cabeçalho para a versão específica do Python (e opções de compilação em uso para construí-lo): eles definem PyObject como um struct que inclui, em primeiro lugar, um ponteiro para um tipo. Lotes de macros são usados, então você pode querer executar a compilação do que Python a partir de fontes de novo, exatamente com as mesmas bandeiras, mas além disso uma -E para parar após o pré-processamento, para que possa se referir ao código específico C que fez os bits você está vendo no despejo de núcleo.

Um tipo de objeto tem, entre muitas outras coisas, uma string (matriz de char) que é o seu nome, e com isso você pode inferir que exatamente objetos desse tipo contêm - seja conteúdo diretamente, ou talvez algum conteúdo (tais como uma extensão, ou seja, o número de itens) e um ponteiro para os dados reais.

Eu fiz tal super-avançada post-mortem depuração de um par de vezes (começando com conhecimento muito preciso das versões Python envolvidos e todas as fontes pré-processadas preparados e c) e cada vez que ele me levou um ou dois dias (eram Eu ainda um freelance e cobrando por hora, se eu tivesse que lance em tal tarefa Eu diria que pelo menos 20 horas - as minhas taxas horárias não-baratos -!).

IOW, vale a pena somente se ele é realmente realmente a única maneira de sair de algum pickle muito caro. No lado positivo, ele vai te ensinar mais sobre o funcionamento interno do Python que você pensou sempre foi lá, mesmo depois de memorizar todas as linhas das fontes. Boa sorte, você vai precisar de algum !!!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top