Я пытаюсь отладить некоторый код C++ 11, и LLDB бесполезен. Код выглядит примерно так:Как отключить _all_ оптимизации в Clang ++?
void f(my_type dt) {
try {
g(h(dt));
}
catch (/* reasonable exception type here */) {
}
}
Когда я устанавливаю точку останова на g(h(dt))
линии, LLDB настаивает, что стоимость dt
недоступна. Это, безусловно, не могло быть устранено, поскольку оно используется при реализации h
в качестве входных данных для некоторых запросов к базе данных.
Я использую CMake, и он компилирует используя следующие флаги:
CXX_FLAGS = -g -O0 -fPIC -std=c++11 -stdlib=libc++ -Wall
Я подтвердил (с помощью make VERBOSE=true
), что эти флаги, на самом деле, используется для создания проекта. Насколько я могу судить, должна быть включена полная отладочная информация, и все оптимизации отключены. Это явно не так. Какие еще флаги можно добавить, чтобы заставить Clang сохранить все параметры и переменные в стеке вызовов?
К сожалению, небольшие тестовые примеры с использованием небольших файлов и функций не воспроизводят эту проблему: большую часть времени переменная сохраняется, как я ожидаю.
Я работаю над Mac, работающим с Yosemite.
$ clang++ --version
Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.1.0
Thread model: posix
'-fno-inline' может быть? – Pradhan
Нет, '-fno-inline' не помогает. – gcv