0

我正在测试 OpenDBX 以连接到 MSSQL 服务器以用于 Ubuntu Linux 上的项目。我正在使用 C/C++ 和 Eclipse CDT IDE。我从 OpenDBX 网页构建了一个简单的测试应用程序(下面没有显示错误测试)。

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

问题:当我从 shell 或 Run->Run 运行代码时,我看到与服务器(wireshark)建立了连接。当我尝试使用 Eclipse 调试器运行 odbx_init(...) 上的应用程序块时,我看不到 wireshark (SYN/ACK) 上没有任何内容。我将 gdb 设置为 sudo,(如何在 Ubuntu 的 eclipse 中以 root 身份调试应用程序?)我也使用相同的平台和设置来使用我们正在开发的其他应用程序的套接字访问网络。

关于为什么 odbx_init 可能会阻止调试器的任何想法?

最后一点要添加的信息。使用 C++ API 时不会出现此问题。只有 C API 提出了所描述的问题。


最后一点要添加的信息。使用 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 回答