Обновление : Как указывает Ричард Тингл , поскольку с CF10 вы можете использовать CallStackGet () , что лучше, чем создание фиктивного исключения. *
Оригинальный ответ : Самый простой способ - создать фиктивное исключение и немедленно его поймать. Но у этого есть и обратная сторона, когда в выводе отладки появляется фиктивное исключение. Для меня это было условием сделки, поэтому я написал следующий код (основанный на этого кода на cflib ). Я хотел создать объект, похожий на объект cfcatch, чтобы я мог использовать его в местах, где ожидался объект cfcatch.
Примечание. Возможно, вам придется немного изменить этот код, чтобы он работал в CF8 или более ранней версии. Я не думаю, что синтаксис {...}
для создания объекта поддерживался до CF9.
StackTrace = {
Type= 'StackTrace',
Detail= '',
Message= 'This is not a real exception. It is only used to generate debugging information.',
TagContext= ArrayNew(1)
};
j = CreateObject("java","java.lang.Thread").currentThread().getStackTrace();
for (i=1; i LTE ArrayLen(j); i++)
{
if(REFindNoCase("\.cf[cm]$", j[i].getFileName())) {
ArrayAppend(StackTrace.TagContext, {
Line= j[i].getLineNumber(),
Column= 0,
Template= j[i].getFileName()
});
}
}