Изучаю Го, есть проблемы.
Люди, которые тут клятвенно утверждали что в Гнусных утилитах не встречаются internal errors, можете тут побаттхертить :(
На всякий случай объясню, чтобы чье-то нежное сердце не порвалось: msys2 - это переписанный msys, основанный на современном cygwin и MinGW-w64. Работает на ядре Windows соответственно. Пакетный менеджер - pacman, тот что взят из милой сердцу ArchLinux. Словом, идеальная GNU\Windows система. GNU взят потому, что каждый честный человек должен пользоваться GNU. Windows потому что так сказал работодатель.
Собственно проблема в чем. Мне не нравится liteide, а Eclipse нравится очень. Поэтому первым делом я захотел настроить Eclipse для работы с Go на всех платформах. Для этого под Windows решено было установить Eclipse с плагином Goclipse.
Для запуска отладчика понадобился GDB. В факе Goclipse честно предупредили, что под виндой Сygwin лучше не использовать, а взять msys2 (тем более что это и есть фишка msys2). Там же честно предупредили, что брейкпоинты рабтоать будут, а просмотр переменных - нет (это меня не остановило - надо же проверить, вдруг уже исправили).
После основательного задротства по сборке Eclipse CDT со всеми плагинами и настройками (удовольствие сравнимое с поклейкой LFS), запускаем хэлловорлд со включенным брейкпоинтом, и шта же видим?
../../gdb-7.11.1/gdb/buildsym.c:1773: internal-error: buildsym_init: Assertion `free_pendings == NULL' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n) [answered Y; input not from terminal]
This is a bug, please report it. For instructions, see:
<http://www.gnu.org/software/gdb/bugs/>.
../../gdb-7.11.1/gdb/buildsym.c:1773: internal-error: buildsym_init: Assertion `free_pendings == NULL' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Create a core file of GDB? This application has requested the Runtime to terminate it in an unusual way.
(y or n) [answered Y; input not from terminal]
Please contact the application's support team for more information.
На основе данных из гугла я попробовал подсунуть GDB параметры в конфигурации Eclipse CDT: создал текстовый файл .gdbinit, вписал туда строчку:
set args --interpreter=-mi2 -quiet
и прописал в Debug Configuration в Эклипсе. Но это либо не помогло, либо я неправильно понял синтаксис .gdbinit, либо это просто очередной баг в Эклипсе и она забыла прописать его при запуске GDB. Да и не должно это помочь, а просто заскринить одну из проблем.
Чтобы вы не думали, что я тунеядец и не погуглил, прежде чем задавать вопрос просветленным гурам:
- Новейшее обсуждение за 2015 год: ссылка
Резолюция: нет решения - Старое обсуждение за 2013 год, но не гошников а крестовиков: ссылка
Резолюция: использовать «break __cxa_throw» вместо «catch throw». Непонятно, как это поможет в интерактивном дебаге Эклипсы. - Старый баг в оффтрекере Eclipse CDT, 2012 год: ссылка
Резолюция: тикет все еще в статусе NEW - Старые баги в оффтрекере GDB, 2012 год: ссылка, ссылка
Резолюция: первый тикет FIXED но видать в 2016 сломалось, второй тикет все еще в статусе NEW.
Что тут можно сделать? Здавайте ваши ответы!
С меня как всегда - ничего :)
Спасибо