При обновлении до xcode 11.3 во время отладки Step Over (f6) начал вести себя подобно Step Into (f7).
Шаги для воспроизведения
Создать новый Xcode проект для macOS Инструмент командной строки
Измените основной. cpp с помощью этого
#include <iostream>
void test() {
std::cout<<"test";
}
int main(int argc, const char * argv[]) {
test();
return 0;
}
go для настройки параметров сборки проекта и добавления -Wl,-no_function_starts
в 'Другие флаги компоновщика'
Добавьте точку останова в строку, где вызывается функция test
, и начните отладку
, когда точка останова нажмите попробуйте перешагнуть через (f6)
Он ведет себя как Step Into (f7) и переходит в функцию тестирования вместо перехода к следующему оператору возврата.
удаление -no_function_starts
флага решает проблему
Но я хочу знать, почему был использован флаг? Его описание здесь говорит
-no_function_starts
По умолчанию компоновщик создает сжатую таблицу начальных адресов функций в LINKEDIT конечного связанного изображения. Эта опция отключает это поведение.
Какова важность этой таблицы начальных адресов функций и почему кто-то ее отключил? Как это влияет на поведение xcode при переходе?