Безотносительно того, какой язык или платформа используется, есть классический способ отладки приложений - логирование событий и данных.
Т.е. вы должны покрыть свой код выводом отладочной информацией, в который как минимум должны включить вызовы методов и часть информации о передаваемых параметрах. Полноту и формат логируемой информации и место размещения выбирайте от того, как именно все это будете использовать, например одно время я использовал текстовый формат с машиночитаемым форматом хранения информации (каждая строка - json, определенный формат для указания времени, содержимого стека вызовов методов, аргументов и выделенных переменных) и для анализа логов писал небольшое приложение (в большинстве случаев достаточно взгляда на лог просто выводом в консоль и утилит tail и grep).
На самом деле не обязательно покрывать отладочной информацией ВЕСЬ проект, это слишком раздувает файл логов, затрудняя его анализ и замедляя работу приложения. Обычно вы знаете, в каком месте кода у вас проблема, и именно эту часть покрываете отладочной информацией.
Делайте общее место размещения лога, если у вас отладка многопользовательского приложения, само собой вы должны включать в лог идентификатор клиента, это сильно поможет разрешать ситуации по монопольному доступу к данным, например.
p.s. свой колбек на вызов функции в javascript можно зарегистрировать так:
(function() {
var call = Function.prototype.call;
Function.prototype.call = function() {
console.log(this, arguments);
return call.apply(this, arguments);
};
}());