В PHP вы можете получить массив трассировки стека из \Exception::getTrace()
или из debug_backtrace()
,
Две трассировки стека в одном и том же процессе / запросе обычно имеют несколько общих вызовов, а затем несколько отдельных вызовов. Или иногда одна трассировка стека может полностью содержаться в другой, более глубокой трассировке стека.
Например. если вы ловите исключение, а затем в блоке catch вы вызываете debug_backtrace()
тогда это, как правило, будет суб-следом следа исключения.
В целях отладки может быть интересно взглянуть только на ту часть трассировки, которая относится к функции, содержащей try / catch.
Каким будет элегантный способ получить этот частичный или относительный след стека?
У меня есть некоторая идея, как бы я сделал это сам, и мог бы опубликовать это как ответ. Но мне любопытно, есть ли лучший способ.
Я ожидаю одну особую трудность: два элемента на каждой трассе могут выглядеть одинаково, даже если они на самом деле разные. Я предполагаю, что два вызова из одного и того же цикла неразличимы. Интересно, есть ли какой-нибудь трюк, который сделает их различимыми?
Задача ещё не решена.
Других решений пока нет …