Когда Исключение отображено (или более общий - когда оно преобразовывается в Строку), отслеживание стека показывают. То, что я хочу сделать, должно изменить формат путей к файлам исходного кода, показанных в такой трассировке.
Конкретно я хотел бы оставить имена файлов только (без полного пути) или показать только, что часть пути, который запускается с базового каталога проекта. Полные пути являются обычно ненужными и создают помехи целому сообщению.
Как я могу сделать это?
Я задавал похожий вопрос, хотя и не совсем тот же, здесь: Печать информации о трассировке стека в C#.
Что вы можете сделать, так это следующее:
var trace = new System.Diagnostics.StackTrace(exception);
что дает вам объект StackTrace, который предоставляет вам всю необходимую информацию. В моем случае это было сделано для того, чтобы избежать необходимости работать с локализованным текстом исключения, но я полагаю, что вы можете использовать тот же подход для своих нужд.
Edit: Я заметил, что добавил комментарий к принятому ответу на мой вопрос, касающийся параметра "needFileInfo" в конструкторе. Я вижу этот конструктор здесь: StackTrace(Exception e, bool fNeedFileInfo), я не могу сейчас найти фактический код, но я бы предположил, что вам нужно передать true
в этот аргумент. Думаю, здесь главное - эксперимент.
Другими словами, я полагаю, что код должен быть таким:
var trace = new System.Diagnostics.StackTrace(exception, true);
Ознакомьтесь с классом System.Diagnostics.StackFrame и методом GetFileName . Вы можете написать метод, который будет получать трассировку стека и имена исходных файлов, которые вы можете вызвать в своем обработчике исключений.