Ответ 1
Обновление: Как указывает ответ Ричарда Тингла, начиная с 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()
});
}
}