Я использую Eclipse + Mingw + Boost в Windows.
У меня возникает проблема, когда отладчик получает в Eclipse этот фрагмент кода:
int YarpInterface::connect_to_port(std::string ip, std::string port, tcp::socket* socket)
{
boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
tcp::resolver::query query(boost::asio::ip::tcp::v4(), ip, port);
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
tcp::resolver::iterator end;
boost::system::error_code error = boost::asio::error::host_not_found;
while (error && endpoint_iterator != end)
{
socket->close();
socket->connect(*endpoint_iterator++, error);
}
if (error)
{
throw boost::system::system_error(error);
}
return true;
}
Когда я начинаю отладку, gdb корректно останавливается внутри основного, я могу безопасно пошагово выполнить свой код до вызова socket-> connect, после чего я теряю контроль над выполнением, и программа просто продолжает выполняться до это выходит. Все точки останова после этой строки полностью игнорируются. Я не вижу полезных сообщений об ошибках в логах GDB.
Я использую последнюю версию Mingw, Boost и Eclipse. Я скомпилировал свой код и ускорился, используя тот же компилятор, оба с включенными символами отладки.
Редактировать: я также могу безопасно входить в вызов через буст-код, поэтому я совершенно уверен, что проблема возникает, когда GDB достигает системных вызовов более низкого уровня.