Я пытаюсь отладить довольно сложный вычислитель формул, написанный на UDF T-SQL (не спрашивайте), который рекурсивно (но косвенно через промежуточную функцию) вызывает себя, бла, бла.
И, конечно, у нас есть ошибка.
Теперь, используя операторы PRINT (которые затем можно прочитать из ADO.NET путем реализации обработчика для события InfoMessage), я могу смоделировать трассировку для хранимых процедур.
То же самое для UDF приводит к сообщению времени компиляции:
Invalid use of side-effecting or time-dependent operator in 'PRINT' within a function.
Я получаю сообщение (PRINT выполняет некоторые действия, например, сбрасывает @@ROWCOUNT
, что определенно запрещено в UDF, но как я могу отследить через вызовы? Я хочу распечатать этот след, чтобы я мог его изучить не отвлекаясь на пошаговые вызовы в отладчике ...
РЕДАКТИРОВАТЬ: Я пытался использовать SQL Profiler (это был первый раз для меня), но я не могу понять, что для трассировки: хотя я могу получить трассировку для вывода запросы, отправленные в базу данных, являются непрозрачными в том смысле, что я не могу детализировать до вызываемых Expression-UDF: я могу проследить фактическую вызванную хранимую процедуру, но UDF, вызываемые этой процедурой, не перечислены. Я что-то пропустил? Я думаю, нет ...
РЕДАКТИРОВАТЬ # 2: Несмотря на то, что (автоматически) принятый ответ действительно отслеживает вызовы функций - очень полезно, спасибо - это не помогает выяснить, какие параметры были переданы в функция. Это, конечно, важно в отладке рекурсивных функций. Я опубликую, если найду какое-либо решение ...