Menus

Arquivos de configuração

menu Arquivo mostrando quatro items: Abrir, Salvar, Salvar como, Sair

As opções utilizadas para configurar uma sessão específica de Ladybug podem ser salvas para uso futuro.

Rescrita

menu Rescrita mostrando três itens: On the fly, Rescreva agora, Opções

Classes podem ser rescritas no momento em que são carregadas (rescrita on the fly, que é o default) ou em algum momento antes da execução (neste caso, a versão rescrita deve ser armazenada em algum diretório). A rescrita on the fly é mais simples de usar, mas não funciona se:

Opções de execução

Algoritmo

Botões de rádio: Dinning-Schonberg, Vanilla Eraser, Fast Eraser,
    GC Eraser; Checkboxes: Ignorar inicialização de classes, Thread AWT é
    iniciada quando a primeira janela é exibida

Há dois algoritmos: Dinning-Schonberg and Eraser. As três opções de Eraser diferem apenas na implementação: Vanilla Eraser e Fast Eraser são mais rápidos, enquanto GC Eraser é mais econômico no uso de memória.

Eraser refere-se ao algoritmo proposto por Stefan Savage, Michael Burrows, Greg Nelson, Patrick Sobalvarro e Thomas Anderson em Eraser: A Dynamic Data Race Detector for Multithreaded Programs. Para cada variável (potencialmente) compartilhada, Eraser verifica se há um monitor que proteja todos acessos a ela (a inicialização de variáveis, entretanto, não é levada em consideração).

Dinning-Schonberg refere-se ao algoritmo para detecção de condições de disputa proposto por Anne Dinning and Edith Schonberg em Detecting Access Anomalies in Programs with Critical Sections. Este algoritmo é mais genérico que Eraser, porém mais lento; ele deve ser usado se:

O algoritmo Dinning-Schonberg pode emitir falsos alarmes devido a initializações "complexas" de campos estáticos (complexas, aqui, quer dizer que um campo estático refere-se a um objeto, e um campo deste objeto é escrito quando a classe é inicializada). Se seu programa é vítima destes alarmes, pode ser melhor selecionar a opção Ignorar inicialização de classes. E também seguir este link para saber mais sobre inicialização de classes e como isso afeta Ladybug.

Por fim, a menos que seu programa interaja com a thread gerenciadora de eventos antes que qualquer janela seja exibida, a opção Thread AWT é iniciada quando a primeira janela é exibida deve ser deixada selecionada (na maior parte dos casos pode-se assumir que esta thread é iniciada só quando a primeira janela aparece).

Quando uma condição de disputa é detectada

Botões de rádio: Interromper a execução, Atirar uma exceção, 
Exibir um aviso; Checkbox: Avisar sobre a mesma variável apenas uma vez

O programa pode ser interrompido, uma mensagem pode ser exibida ou uma exceção pode ser atirada quando uma condição de disputa é detectada. Selecionar a opção Avisar sobre a mesma variável apenas uma vez impede que avisos sobre um campo de um objeto sejam emitidos mais de uma vez.

Saí da

Botões de rádio: Nova janela, Arquivo, Padrão; Checkbox: Com detalhes; 
Um campo para fornecer um nome de arquivo e um campo para fornecer um filtro
para a saída com detalhes

A saída do programa examinado por Ladybug pode ser enviada para a saída padrão (System.out e System.err), uma nova janela ou um arquivo (escolhendo enviar a saída para um arquivo é preciso especificar o nome do arquivo também).

Se a opção Com detalhes é selecionada, o algoritmo para detecção de condições de disputa exibirá mensagens (sobre tudo o que fizer. Além disso, se um filtro é especificado, mensagens sobre variáveis que não estão presentes no filtro não serão exibidas. O filtro é uma lista de nomes de variáveis separados por dois pontos. Por exemplo:
apple:Tree.banana:@12efcc.watermelon:@a1009b.101 significa que mensagems sobre acessos a variáveis devem ser exibidas apenas se elas se referem às variáveis:

Linha de comando

Um campo para digitar a linha de comando

Você só precisa fornecer a linha de comando para rodar seu programa; Ladybug é responsável por alterá-la no que for necessário. Contudo:

Executar

um botão com uma joaninha e o texto 'Executar'

Inicia a execução da versão de seu programa monitorada por Ladybug.

Opções de rescrita

Diálogo com opções de rescrita; contém um campo para inserir nomes de 
variáveis, um campo para inserir nomes de classes e pacotes, um campo para 
inserir nomes de arquivos que dever ser rescritos, um botão com o texto 
'Adicionar', um campo para fornecer o diretório onde os arquivos rescritos
devem ser armazenados, um 'checkbox' com o texto 
'Processar pastas recursivamente' e um 'checkbox' com o texto 
'Levar compatibilidade binária em consideração'

Ignorar campos

É possível informar variáveis que não devem ser monitorados. Nomes de variáveis podem ser completamente qualificados (para evitar ambiguidades) mas isso não é necessário (por exemplo, org.rk.Foo.myField é um nome completamente qualificado).

Ignorar classes e pacotes

Classes e pacotes que não devem ser rescritos podem ser informados também. Para nomes de pacotes, um asterisco no final funciona como um coringa. Por exemplo, um nome como com.foo.* faz com que Ladybug ignore todas as classes no pacote com.foo quando rescrevendo seu programa.

Arquivos a rescrever

É preciso informar quais arquivos devem ser rescritos, mas apenas quando você não está usando rescrita on-the-fly. Neste caso, se você não especificar um diretório de saída para armazenar os arquivos rescritos, os arquivos originais serão sobrescritos pela nova versão. Diretórios encontrados na lista de arquivos a rescrever serão processados recursivamente se a opção Processar pastas recursivamente estiver selecionada.

Compatibilidade binária

Esta opção deve ser selecionada se compatibilidade binária deve ser levada em consideração quando rescrevendo as classes. Isto é importante só se, no seu programa, estas três condições são verdadeiras: