Eclipse CDT многопоточная отладка не оптимальна - как выполнять потоки исключительно?
Я знаю ответ на этот вопрос, я размещаю его для других, чтобы увидеть его
Если вы используете eclipse CDT, вы, вероятно, понимаете, что eclipse не является отладчиком, а просто интерфейсом приложения, а именно GDB. Поэтому при отладке программ на С++ вы фактически используете GDB более комфортно. Если вам когда-либо придется отлаживать многопоточную программу в eclipse CDT, вы поймете, что ситуация быстро становится беспокойной, потому что, когда вы нажимаете точку останова, все потоки останавливаются, и когда кто-то пытается выполнить одну строку в определенном потоке, она также запускается другие потоки. Чтобы он работал правильно, потоки должны выполняться произвольно и исключительно, поэтому, когда программист выполняет одну строку, он выполняет только конкретный поток.
Итак, по умолчанию настройки gdb по умолчанию оставляют выключенную "блокировку планировщика". Если вы отлаживаете многопоточные приложения, вы поймете, что это должно быть включено в GDB для достижения желаемого поведения. Как выполнить эту команду:
set scheduler-locking on
в GDB внутри eclipse CDT?
Ответы
Ответ 1
Может быть, если вы добавите следующий gdb script, который может установить переменную, когда программа остановится, и выключит ее, если вы продолжаете:
define hook-step
set scheduler-locking on
end
define hookpost-step
set scheduler-locking off
end
define hook-run
set scheduler-locking off
end
define hook-continue
set scheduler-locking off
end
Ответ 2
Как минимум один способ сделать это, что, безусловно, решает проблему, - это знать, как перемещаться по огромному набору функций, которые предлагает eclipse. Как правило, при запуске программы eclipse CDT переключает консольное окно (если оно открыто, как правило, внизу), чтобы показать ввод/вывод программы.
Но вы можете изменить это, если не знаете - посмотрите изображение. Эта кнопка на втором, чтобы последний справа - синий, который выглядит как монитор - вы можете выбрать консоль ввода GDB. Это обсуждалось также в этой теме.
Оттуда просто введите команду.
РЕШЕНО, НО НУЖНО ЛУЧШЕЕ РЕШЕНИЕ
Но теперь, когда это было решено, лучше решить его как вопрос убеждения; необходимость набирать блокировку планировщика при каждом запуске программы - глупо. Но проблема с загрузкой файла gdbinit заключается в том, что файл gdbinit получает исходный код, прежде чем eclipse установит программу для gdb для решения. Это проблема, так как это приводит к тому, что просмотр отладчика зависает внутри eclipse, как жалуется gdb. Чтобы понять, что происходит, попробуйте и запустите gdb, затем отдайте команду без загрузки исполняемого файла. Он терпит неудачу - так как установить это как опцию, которая липкая?