Eu encontrei um jeito hacky para obter o que eu quero: Basta escrever um script dtrace como:
syscall::sendto:entry
/pid == $setPIDHere/
{
tracemem((copyin(arg1, arg2)),9999);
}
E pegue o resultado. Hacky, mas funciona
Em nossa loja, temos um ambiente não homogêneo e fazemos Java em caixas diferentes - principalmente Mac OSX, eu no Linux e uma caixa do Windows. Quando se trata de depurar o JPQL-Queries e seu resultado de SQL, existe a necessidade de ler SQL simples . Eu encontrei uma possibilidade em usar o _general_log_ em msql e deixar o servidor fazer o log de consulta. Mas eu sou um desenvolvedor preguiçoso, então pensei em uma abordagem mais rápida para obter resultados diretos .
No meu Linux-box eu simplesmente strace -p $CATALINAsPID -f -q - s 9999 - e sendto
e deixo minha consulta ser executada. sendto
é a chamada do sistema que contém o SQL simples .
Eu queria fazer o mesmo com o Mac OSX e encontrei dtruss
(uma fassade para dtrace ?), que faz coisas parecidas como strace
. Então tentei reduzi-lo para sendto
(analógico para o Linux) - mas sem sucesso.
Como o dtruss funciona, resp: como rastrear o SQL simples ?