LINUX.ORG.RU

Clion - непонятное поведение в дебаге

 ,


0

1

Я что-то делаю не так, но поведение Clion не лезет ни в какие рамки моего представления.

Есть текст

    {
        std::cout << "????" << std::endl;
 =>A    string fnameLog = _fnameLog;

        _logfile = fopen(fnameLog.c_str(), mod.c_str());

        if (_logfile != NULL)
        {
            //fprintf(_logfile, "%s", (txt.c_str()));
            //err = fclose(_logfile);
=>B         std::cout << txt << std::endl;
        }
    }

После выполнения «В» управление перескакивает на «А» и только затем выходит из IF. Что это такое и почему?


После выполнения «В» управление перескакивает на «А» и только затем выходит из IF. Что это такое

Деструктор std::string, как вариант.

и почему?

Потому что компилятор может собирать код в любом порядке, если посчитает, что так будет быстрее. Соберите код с -O3 и посмотрите, как исполнение прыгает туда-сюда между инициализацией и выполняющимся кодом, а половина значений оказывается <optimized out>.

А зачем в этом блоке копировать fNameLog?

anonymous
()
Ответ на: комментарий от anonymous

Спасибо Похоже так оно и есть Но день потерян Еще раз спасибо

ezus
() автор топика

отладку можно еще производить, либо без ключей оптимизации вообще, либо с -Og.

во всех остальных случаях переходы будут странными, а точки останова тоже работать странно или вообще не работать. именно за счет сильной оптимизации генерируемого кода.

и это связано не с IDE, а с используемым компилятором.

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: комментарий от ezus

А как можно отменить оптимизацию?

для gcc это опция компилятора(в строке его вызова) -O0 ( O ноль). то есть нулевой уровень оптимизации.

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)

В любой непонятной ситуации смотри дизассембли. Там инструкции будут иметь инной порядок относительно с++ кода.

Keltir
()
Ответ на: комментарий от Keltir

В любой непонятной ситуации смотри дизассембли.

+100500

fsb4000 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.