0

Ubuntu Linux 上のプロジェクトの MSSQL サーバーに接続する OpenDBX をテストしています。私は C/C++ と eclipse CDT IDE を使用しています。私は、OpenDBX Web ページから簡単なテスト アプリを作成しました (以下にエラー テストは示していません)。

odbx_init( &handle, "mssql", "172.16.232.60", "" );
odbx_bind( handle, "testdb", "testuser", "testpwd", ODBX_BIND_SIMPLE );
odbx_finish( handle );

問題: シェルまたは [実行] -> [実行] からコードを実行すると、サーバー (wireshark) との接続が確立されていることがわかります。Eclipse デバッガーを使用して実行しようとすると、アプリケーションが odbx_init(...) でブロックされ、wireshark (SYN/ACK) で何も表示されません。私は sudo として gdb をセットアップしています ( Ubuntu の eclipse でアプリケーションをルートとしてデバッグするにはどうすればよいですか? ) また、これと同じプラットフォームとセットアップを使用して、開発中の他のアプリケーションでソケットを使用してネットワークにアクセスします。

odbx_init がデバッガーからブロックされている理由についてのアイデアはありますか?

最後にもう 1 つ情報を追加します。C++ API を使用する場合、この問題は発生しません。説明されている問題が発生するのは C API だけです。


最後にもう 1 つ情報を追加します。C++ API を使用する場合、この問題は発生しません。説明されている問題が発生するのは C API だけです。

4

1 に答える 1

0

「回避策」を見つけました。明らかに、Eclipse GDB デバッグ モードでは、ライブラリの動的ロードが失敗します。main の開始時にこれを回避するには、ライブラリを明示的にロードしてからすぐに閉じます。これにより、ライブラリがメモリに配置されるため、OpenDBX API への呼び出しが行われると、ライブラリは既に常駐しています。すべての低レベルの詳細についてはわかりませんが、これにより、Eclipse で OpenDBX をデバッグできます。誰かがより良い説明または修正/回避策を持っている場合は、私に知らせてください. main() の先頭にある回避策のコードは次のとおりです。

void *lib_handle_mssql;
lib_handle_mssql = dlopen("/usr/lib/opendbx/libmssqlbackend.so",RTLD_NOW);
if(!lib_handle_mssql)
{    
    // Bad, Bad, Bad...
    printf("%s\n",dlerror());
    exit(EXIT_FAILURE);
}
dlclose(lib_handle_mssql);
// Can now debug in eclipse IDE.
于 2013-09-17T13:22:35.953 に答える