(я являюсь автором пакета 'debug', в котором живет 'mtrace')
Если определение «SubFunction» находится за пределами «MyFunction», то вы можете просто отследить «SubFunction» и не нужно отслеживать «MyFunction». И функции работают быстрее, если они не mtrace'd, поэтому хорошо, чтобы трассировать только так мало, как вам нужно. (Но вы, наверное, уже знаете это!)
Если «MyFunction» определена только внутри «SubFunction», один прием, который может помочь, - это использовать условную точку останова в «MyFunction». Вам понадобится mtrace (MyFunction), затем запустите его, и когда появится окно отладки, выясните, в какой строке определена «MyFunction». Скажите, что это строка 17. Тогда должно работать следующее:
D (n)> bp (1, F) # больше не показывать окно для MyFunction
D (n)> bp (18, {mtrace (SubFunction); FALSE})
D (n)> go ()
Должно быть понятно, что это делает (или будет, если вы попробуете это).
Единственными недостатками являются: необходимость делать это снова всякий раз, когда вы меняете код «MyFunction», и; замедление, которое может произойти из-за самой трассировки MyFunction.
Вы также можете поэкспериментировать с добавлением аргумента debug.sub в MyFunction, который по умолчанию равен FALSE. В коде «MyFunction», затем добавьте эту строку сразу после определения «SubFunction»:
if (debug.sub) mtrace (SubFunction)
Это исключает необходимость отслеживания самой MyFunction, но требует от вас возможности изменить его код.