Como localizar o código-fonte que implementou um determinado recurso? [fechadas]

14

Eu queria saber quais são algumas técnicas para localizar qual código implementou um recurso específico, em um aplicativo de área de trabalho.

Eu sou um desenvolvedor júnior, com apenas experiência em programação profissional em torno da programação da web. Na Web, é mais fácil fazer isso. Por exemplo, você "inspeciona" um botão com as ferramentas do navegador e pode ver o que está sendo feito ao clicar nele. E então, presumindo que você tenha o código fonte completo, você pode detalhar a hierarquia das chamadas.

Mas como você faz isso em aplicativos de desktop? Pelo menos, sem ter que mergulhar na base de código completa?

    
por py_script 08.03.2014 / 23:44
fonte

3 respostas

21

Voltar ao rastreio

O rastreio de retorno está localizando um endpoint para um evento associado ao recurso (veja abaixo). Uma vez lá, um ponto de interrupção é colocado no depurador. O recurso é acionado e quando o depurador é interrompido. A pilha de chamadas é revisada para rastrear o caminho de chamada. Ao percorrer a pilha de chamadas, você pode fazer anotações sobre os estados das variáveis ou colocar novos pontos de interrupção para inspecionar o evento novamente.

O recurso é acionado novamente e o depurador pára nos novos pontos de interrupção. Você pode então repetir o rastreio de volta ou executar rastreamento de encaminhamento até que a meta seja encontrada.

Prós e & Contras

  • É sempre mais fácil subir a pilha de chamadas e ver como você chegou em algum lugar.
  • Pode haver milhões de condições que precisam ser verdadeiras antes de atingir um endpoint. Se você conhece o endpoint, já economizou muito trabalho.
  • Se o recurso estiver quebrado. Você pode nunca chegar ao ponto final, e o tempo pode ser desperdiçado tentando descobrir o porquê.

Descoberta do terminal

Para depurar um recurso, você precisa saber onde, no código-fonte, o objetivo final é alcançado. Somente a partir deste ponto você pode rastrear para ver como o código chegou lá. Um exemplo; Para entender como o desfazer é executado. Você sabe onde no código as coisas estão desfeitas, mas você não sabe como as coisas chegam lá . Isso seria um candidato a backtracing para descobrir como o recurso funciona.

Encaminhamento de encaminhamento

Encaminhar rastreamento está localizando um ponto inicial para um evento associado a um recurso (veja abaixo). Uma vez lá, as mensagens de registro são inseridas no código-fonte ou os pontos de interrupção são definidos. Esse processo é repetido à medida que você avança mais longe do ponto inicial até descobrir o objetivo para o recurso.

Prós e & Contras

  • É o ponto de partida mais fácil para encontrar um recurso.
  • A complexidade do código reduz a eficácia do rastreamento de encaminhamento. Quanto mais condições houver no código, maior a chance de você ir na direção errada.
  • O rastreamento de encaminhamento geralmente resulta na configuração de pontos de interrupção que serão acionados por eventos não relacionados. Interromper o processo de depuração e interferir na sua pesquisa.

Descoberta do ponto de partida

Você pode usar palavras-chave, identificadores de interface de usuário (IDs de botão, nomes de janela) ou fácil de encontrar ouvintes de evento associados ao recurso. Por exemplo, você pode começar com o botão usado para acionar um recurso desfazer .

Processo de eliminação

Você pode pensar nisso como o ponto médio em comparação com as posições ponto inicial e ponto final . Você realiza um processo de eliminação quando já sabe que um pedaço de código é usado em um recurso, mas não é nem o início nem o final do recurso.

A direção que você toma do ponto médio depende do número de entradas e saídas. Se o pedaço de código for usado em muitos lugares, o rastreamento de volta desta posição pode consumir muito tempo, já que todos eles precisam ser inspecionados. Você então emprega um processo de eliminação para reduzir essa lista. Alternativamente, você pode realizar um forward trace a partir deste ponto, mas, novamente, se o chunk de código se ramifica para muitos lugares, isso também pode ser um problema.

Você precisa reduzir as direções de posição não seguindo caminhos que claramente não seriam executados para o recurso. Passando por este código e apenas colocando pontos de interrupção onde provavelmente está relacionado ao recurso.

A depuração

Middle point geralmente requer mais recursos IDE avançados. A capacidade de ver a hierarquia de código e dependências. Sem essas ferramentas, é difícil fazer isso.

Prós e & Contras

  • Os pontos do meio são geralmente o primeiro código que aparece quando você pensa no recurso. Você diz para si mesmo "Ah, isso tem que usar XXXX para trabalhar".
  • Pontos médios podem revelar pontos de início mais fáceis.
  • Os pontos médios podem ser uma maneira fácil de encontrar o rastro de um recurso quando perdido por alterações de sincronização ou segmentação.
  • Os pontos médios podem levá-lo a um código com o qual você não está familiarizado. Custando seu tempo para aprender o que está acontecendo.
por 09.03.2014 / 00:54
fonte
10

Assumindo que o recurso está ligado a alguma coisa da interface do usuário, como um botão ou menu, o que eu tento a seguir (muito tedioso, mas funciona). Isso é procurando pelo código-fonte, não usando um depurador .

  1. Pesquise o texto (esperançosamente distintivo) no botão, por exemplo "Super Recurso X3".
  2. Isso provavelmente está em um arquivo com alguma constante, por exemplo %código%. Para referência futura, lembre-se deste nome de arquivo.
  3. Pode haver outra camada (de até dois) de abstração, continue procurando para obter a String "real" que é usada pelo Button. Observe como isso é feito para o futuro.
  4. Agora, pesquise nessa constante. Espero que você tenha encontrado agora o botão. Talvez seja aí que eles conectam o ActionListener. (Eu estou tomando Java-ese aqui, YMMV, mas o conceito ainda é válido)
  5. Se necessário, pesquise nesse botão e você acabará descobrindo onde ele será conectado a um ouvinte.
  6. Talvez esse ouvinte realmente redirecione para outros ouvintes (a funcionalidade "real") com base na constante, se assim for, siga essa declaração if / else ou case. OBSERVAÇÃO : Se houver uma coisa central e dispatchy, esse é um ótimo lugar para configurar pontos de interrupção .
  7. Finalmente, você deve estar no código real.

Como @amon observou, às vezes um depurador é mais simples ...

    
por 09.03.2014 / 00:16
fonte
3
  • Se você encontrar algum código relacionado, poderá usar o software de controle de código-fonte para mostrar todo o commit ou commits próximos que o adicionaram. Isso deve mostrar tudo o que foi necessário para implementar esse recurso.

  • Uma maneira fácil de encontrar algum ponto de partida para procurar seria percorrer sua base de código procurando o texto no botão.

  • Geralmente, as pessoas colocam um ID de problema do rastreador de problemas nas mensagens de confirmação. Se você puder encontrar um problema descrevendo a solicitação de recurso, poderá procurar por confirmações com esse ID de problema.

por 09.03.2014 / 01:46
fonte