Почему в Xcode 11.3 Step Over (f6) работает как Step Into (f7)? - PullRequest
0 голосов
/ 07 февраля 2020

При обновлении до xcode 11.3 во время отладки Step Over (f6) начал вести себя подобно Step Into (f7).

Шаги для воспроизведения

  1. Создать новый Xcode проект для macOS Инструмент командной строки

  2. Измените основной. cpp с помощью этого

    #include <iostream>
    void test() {
        std::cout<<"test";
    }
    
    int main(int argc, const char * argv[]) {
        test();
        return 0;
    }
    
  3. go для настройки параметров сборки проекта и добавления -Wl,-no_function_starts в 'Другие флаги компоновщика'

  4. Добавьте точку останова в строку, где вызывается функция test, и начните отладку

  5. , когда точка останова нажмите попробуйте перешагнуть через (f6)

  6. Он ведет себя как Step Into (f7) и переходит в функцию тестирования вместо перехода к следующему оператору возврата.


удаление -no_function_starts флага решает проблему

Но я хочу знать, почему был использован флаг? Его описание здесь говорит

-no_function_starts
По умолчанию компоновщик создает сжатую таблицу начальных адресов функций в LINKEDIT конечного связанного изображения. Эта опция отключает это поведение.

Какова важность этой таблицы начальных адресов функций и почему кто-то ее отключил? Как это влияет на поведение xcode при переходе?

...