私はWindowsでEclipse + Mingw + Boostを使用しています。asio socket-> connect callの後でGDBブレークポイントが機能しなくなる
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正しく私ができる安全に単一のステップに私のコードのすべての方法まで、メインの内側に停止します。デバッガはEclipseで、このコードフラグメントになったとき
私が持っている問題が表示されますsocket-> connectの呼び出しの後、私は実行の制御をすべて失い、プログラムは終了するまで実行を続けます。この行の後のすべてのブレークポイントは完全に無視されます。私はgdbログに有用なエラーメッセージが表示されません。
私はMingw、Boost、Eclipseの最新バージョンを使用しています。私は自分のコードをコンパイルし、デバッグシンボルを有効にして、同じコンパイラを使ってブーストしました。
編集:私はブーストコードを通して安全に通話することもできます。したがって、gdbがより低レベルのシステムコールを取得するときに問題が発生すると確信しています。
ブーストをビルドするときにbjamに与えた議論は? –
これらは次のとおりです:--address-model = 32 variant = debug --debug-symbols = on --toolset = gcc –
いくつかのことについて:非同期 'connect'を使用していますか?そうでなければ、 'connect'を呼び出すスレッドがおそらくブロックされています。その時点で他のスレッドがアクティブ(ブロックされていない)ですか? – JimR