LLDB: novo debugger livre (e de alto desempenho) lançado pelo LLVM
O LLVM, que desde 2003 vem se estruturando para oferecer uma moderna infra-estrutura de compilação otimizada e implementada em software livre (sob a licença NCSA), anunciou um novo componente para se juntar ao compilador Clang: o debugger lldb.
O lldb ainda está na versão inicial, e buscando o interesse de quem queira portá-lo para mais arquiteturas ou propor novos recursos, mas já tem alguns pontos positivos a exibir, como o desempenho (que – embora em casos restritos – já inicia superior ao do gdb, do projeto GNU, segundo informam seus desenvolvedores) e a scriptabilidade (usando Python).
As metas e intenções também me pareceram interessantes, incluindo a atenção aos cenários não-triviais de depuração em que os debuggers de hoje não se saem tão bem, a modularização na construção do próprio debugger (“terceirizando” para o compilador as definições que já existem nele), e a própria ênfase em oferecer uma experiência superior ao usuário (no caso, o programador – que deseja depurar o seu programa, e não se preocupar muito com as limitações e complexidades da implementação do debugger).
A versão inicial já funciona para depurar código C, C++ e Obj-C (no Mac OS X), mas espera-se que após o anúncio inicial o suporte se amplie. (via blog.llvm.org)
O LLVM (ou seus componentes) eu ainda não tive tempo de rodá-lo direito, mas já baixei os fontes e compilei (depois de esperar por um longo tempo). Também não tenho certeza do seu modo de operação, suponho que eu tendo o fonte de uma das linguagens que tenha suporte a ele, chame o compilador e gere código objeto para a máquina virtual dele ou direto para código de máquina. Podendo rodar o programa na máquina virtual (com direito a JIT) ou o código nativo (me corrijam se estiver errado).
Sendo assim, posso dizer que seria útil que o tal LLDB pudesse depurar também o binário que foi gerado para a máquina virtual do LLVM.
Em tempo: o que seria um depurador de “alto desempenho”?
Um aspecto bem legal do lldb é que ele usa o clang para parsing de expressões e o llvm para compilar/interpretar as mesmas.
Oque é um avanço em relação ao avaliador de expressões do gdb, que tem seu parser próprio.