Por que o programa depurado abrandar tanto quando usando o método de entrada de depuração?

StackOverflow https://stackoverflow.com/questions/751105

  •  09-09-2019
  •  | 
  •  

Pergunta

Eu estou usando interfaces JDI para criar um depurador e quando eu uso MethodEntryRequests para permitir a entrada método de rastreamento do programa depurado retarda pelo fator de dez. Eu tenho filtro conjunto para thread principal e suspender política para SUSPEND_EVENT_THREAD. Classfilter é limitado e se eu imprimir todos os eventos recebidos não mostra mais de duas dúzias daqueles para que ele não deve receber muito deles. Eu estou depurando localmente e ter followind tipo de linha de comando com o programa java depurado:

-Xdebug -Xrunjdwp:transport=dt_socket,suspend=y,server=y,address=1337

Foi útil?

Solução

A resposta curta é que a execução atravessa o intérprete quando entradas de método são definidas. Eu não acho que haja qualquer maneira em torno deste ...

Isto costumava ser o caso para todo o código em execução no modo de depuração, mas foi reforçada em 1,4 ... agora HotSpot trabalha para 'full-speed' depuração, exceto no caso de entradas de método e saídas, watchpoints e quando única stepping ou métodos que contêm pontos de interrupção.

Outras dicas

2 motivos:

  1. que tem de adicionar verificações em cada entrada método (Não há opção de ajustar apenas alguns métodos)
  2. método inlining torna-se impossível (Tão pequenos métodos corre 10-100x vezes mais lento)

mesmo vale para profilers e .net aplicativos

Eu diria que as necessidades do depurador de acordar para cada chamada de método para ver se ele corresponde ao (s) que foram selecionados para quebrar. Porque tem que verificar cada chamada de método para um jogo potencial antes que possa executá-lo é consideravelmente mais lento do que se ele não tem que fazer todas estas verificações.

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