Из коробки, с clang, когда вы компилируете программу, вы получаете исчерпывающие трассировки стека для ошибок времени компиляции с множеством параметров вывода.

Отладка во время компиляции…

Вот простой пример ванили (сокращенно для этой демонстрации) ...

Не плохо. Файл, номер строки, столбец, объяснение ошибки. Более сложные ошибки покажут более подробную информацию по мере раскрутки стека. Все очень просто, давайте продолжим ...

Отладка во время выполнения…

Но как насчет ошибок времени выполнения? Как они выглядят из коробки? Ну вот один ...

Ух, это не очень полезно. Что-то пошло не так, и это могло произойти где угодно в программе! Что ж, достаточно небольшого кода, чтобы немного улучшить эту ситуацию. Вот приблизительный концептуальный прием, который дает нам немного трассировки стека для неперехваченных исключений времени выполнения.

Добавим это к нашей «очень плохой программе».

Теперь, когда мы запускаем новый код, он вылетает с более полезным выводом!

Из этого вывода мы приблизительно знаем, где в программе что-то пошло не так. Обычно `main ()` вызывает `foo ()`, затем ` foo () `вызвала анонимную лямбду, которая вызвала другую анонимную лямбду из пространства имен` sample `.

Так лучше… ох. Это должно быть нормально для глупых ошибок во время разработки. Но с помощью этого метода на самом деле довольно сложно получить многие важные детали, которые могут понадобиться для отладки производственного приложения. Так что для случая, когда вам действительно нужно погрузиться в дело и стать серьезным, есть замечательный lldb!

Мы можем использовать lldb для использования дампов ядра. Дампы ядра значительно мощнее трассировки стека, потому что вы можете знать все о состоянии программы в момент ее сбоя. Мы можем включить дампы ядра с помощью `ulimit -c unlimited`. Теперь предположим, что в OSX, когда программа вызывает `abort () `, основной файл будет выгружен в` /cores/core.51101/ `(этот номер в имени файла - pid ) . Затем мы можем загрузить это с помощью lldb, используя команду `lldb -c /cores/core.51101`. lldb откроется как интерфейс командной строки, и вы используете множество действительно хороших быстрых команд. Но ради удовольствия, давайте просто наберем `gui`.

Ух ты! Значительное улучшение нашего опыта отладки. Мы можем увидеть источник, пройти по нему, исследовать фреймы стека, специфичные для потока, увидеть, где что-то пошло не так и какие переменные были задействованы на этом пути. Мы даже можем прикрепить отладчик к запущенному процессу.

Таким образом, lldb - невероятно мощный инструмент. Он работает на Linux, OSX и Windows, поддержка находится в активной разработке! До следующего раза, удачной отладки!