1 pontos por GN⁺ 2024-11-28 | 1 comentários | Compartilhar no WhatsApp
  • Uso do C-Reduce

    • C-Reduce é uma ferramenta desenvolvida por Regehr e seus colegas, usada para minimizar reproduções de bugs de compiladores C.
    • Por exemplo, é útil quando você quer reduzir um arquivo C de 10.000 linhas que causa um bug no Clang.
    • O C-Reduce não se limita à linguagem C e pode ser aplicado a várias linguagens.
  • Requisitos do C-Reduce

    • É necessária uma condição determinística.
    • Ter um reprodutor rápido ajuda na velocidade da redução.
    • É necessário um ou mais arquivos-fonte mutáveis que o C-Reduce possa reduzir.
  • Caso de bug no RustPython

    • Para relatar um bug ocorrido no RustPython, foi escrito o script interesting.sh.
    • O script executa o RustPython e depois procura uma mensagem de erro específica com grep.
  • Execução do C-Reduce

    • Ao executar o C-Reduce, foi possível reduzir o tamanho do arquivo em mais de 50%.
    • A opção --not-c foi usada para evitar passes específicos de C e otimizar para Python.
    • Como resultado, foi possível reduzir o arquivo de forma rápida e fácil.
  • Conclusão

    • O C-Reduce pode ser aplicado a várias linguagens e é útil para reduzir arquivos de forma rápida e eficiente.
    • É um blog de código aberto, então, se houver erros, é possível sugerir alterações.

1 comentários

 
GN⁺ 2024-11-28
Comentários do Hacker News
  • Um usuário compartilha uma forma de reduzir arquivos e explica como configurar isso usando RustPython e scrapscript

    • Usa o comando git clone para clonar RustPython e scrapscript, e compila com cargo build --release
    • Baixa o arquivo interesting.sh e concede permissão de execução
    • Usa o comando nix run nixpkgs#creduce para reduzir o arquivo
  • Recomenda o uso do C-Reduce e também sugere experimentar uma ferramenta chamada Shrinkray

    • O Shrinkray é independente de formato e também é útil nos casos em que o C-Reduce não funciona bem
  • Menciona que um artigo sobre o C-Reduce foi publicado em 2012

    • Explica como o C-Reduce funciona por meio do artigo de John Regehr et al.
  • Diz que conheceu o C-Reduce pela primeira vez e sentiu a mesma empolgação de quando descobriu o git bisect pela primeira vez

    • Decide guardar isso na memória para usar quando precisar mais tarde
  • Encontrou um artigo que mostra exemplos do C-Reduce, mas acha difícil entender como ele decide o que remover em cada iteração

    • Supõe que exista um processo de tokenização, mas é difícil entender como isso funciona entre diferentes linguagens de programação
  • Avalia o C-Reduce como muito útil

    • Usa o CSmith para gerar programas de teste aleatórios e, quando ocorre uma falha, usa automaticamente o C-Reduce para reduzir o problema
  • Delta debugging não é um conceito novo

    • Uma implementação de delta debugging chamada "delta" existe há mais de 19 anos e foi lançada como código aberto
    • É mencionada na introdução do LLVM como uma ferramenta padrão de delta debugging
  • Também funciona bem com SQL e está sendo usado no trabalho

    • Conheceu a ferramenta por meio do SQLancer
  • Sem uma explicação de por que funciona também em linguagens além de C, é difícil acreditar

    • Como não usa LLM, isso torna tudo ainda mais confuso
  • Recomenda o cvise como um bom sucessor do C-Reduce

    • Já o usou várias vezes para reduzir programas em assembly a um conjunto mínimo e o considera um programa muito útil