Я нашел хакерский способ, чтобы получить то, что я хочу: просто напишите сценарий dtrace, как:
syscall::sendto:entry /pid == $setPIDHere/ { tracemem((copyin(arg1, arg2)),9999); }
И захватить результат. Хаки, но работает
В нашем магазине мы имеем неоднородную среду и делаем Java на разных компьютерах - в основном Mac OSX, я на Linux и один Windows. Когда дело доходит до отладки JPQL-запросов и их SQL-результатов, необходимо читать простой SQL . Я нашел одну возможность в использовании _general_log_ в msql и позволил серверу вести журнал запросов. Но я ленивый разработчик, поэтому я подумал о более быстром подходе к получению прямых результатов .
На моем Linux-боксе я просто strace -p $CATALINAsPID -f -q - s 9999 - e sendto
и позволю своему запросу выполняться. sendto
системный вызов, который содержит простой SQL .
Я хотел сделать то же самое для Mac OSX и нашел dtruss
(fassade для dtrace ?), Который делает подобные вещи, как strace
. Поэтому я попытался сузить его sendto
(аналог Linux) - но безуспешно.
Как работает dtruss, соответственно: как мне отследить простой SQL ?
Я нашел хакерский способ, чтобы получить то, что я хочу: просто напишите сценарий dtrace, как:
syscall::sendto:entry /pid == $setPIDHere/ { tracemem((copyin(arg1, arg2)),9999); }
И захватить результат. Хаки, но работает