Как отлаживать код, который использует повышение без потери здравомыслия?
Boost - отличный набор библиотек, и это действительно повышает производительность. Но код отладки, который использует его, - это полный кошмар. Разумеется, переход на двадцать тысяч файлов заголовков может быть полезным интеллектуальным упражнением, но что, если вам нужно делать это снова и снова?
Есть ли способ, отличный от разработчика, просто пропустить часть ускорения и отладчик перейти прямо к моему коду?
Visual Studio имеет DebuggerStepThroughAttribute для платформы .NET. Есть ли что-то подобное для родного С++?
Ответы
Ответ 1
Вы можете полностью пропустить пространство имен boost, используя методы, описанные здесь здесь. Просто используйте что-то вроде:
boost\:\:.*=NoStepInto
... в соответствующей записи реестра.
Однако, если ваш код вызывается изнутри boost (например, через boost::function
или аналогичный), ваш код также будет пропущен! Мне будет интересно, если кто-то может найти хорошее решение для этой проблемы...
Ответ 2
Нет никакого независимого от платформы/компилятора способа, но мне сказали, что вы можете сказать отладчику, чтобы он не "входил" в определенные функции или классы. Вы должны найти ключ реестра: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\NativeDE\StepOver]
и создать строковое значение, названное как число, в порядке, в котором должны применяться правила (я тоже немного смущен, но я думаю, что правила просто упорядочиваются в ( возможно, наоборот), и они должны быть применены) и установите для него что-то вроде: "boost::. * = NoStepInto". Например:.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\NativeDE\StepOver]
"10"="boost\:\:.*=NoStepInto"
Вы можете прочитать немного больше здесь.