This section contains information on debugging and troubleshooting your driver.
A common cause of failure to connect to the data store is an ODBC driver or a server process that cannot find the ICU DLL or shared object and refuses to start. This can be frustrating to diagnose, so watch out for it. It is the general case of the driver not being able to find all of its dependencies.
On Windows, this manifests itself as a “-1 Error”. One way to approach this problem is with the Dependency Walker program. This free program identifies the items on which an executable depends. For more information on dependency walker, see the MSDN article at http://msdn.microsoft.com/en-us/magazine/bb985842.aspx. The application can be installed from this location: http://dependencywalker.com/.
Another cause of failure is the server or ODBC driver being unable to find your data store. This is usually a case of configuring the driver or server incorrectly. Make sure to include the right checks in your DSI implementation code to detect this condition, and to return clear error messages to the user. This is a frustrating problem to diagnose because the cause is often buried at the very bottom of the data access stack.
In order to prevent the possibility of memory leaks when using class templates such as
AutoValueMap, a compiler warning will be generated when they are instantiated on an incomplete type. If you encounter a compiler warning about an incomplete type (the actual warning varies between compilers), simply include the header file of the pre-declared class, and remove the pre-declaration. This allows the compiler to have full access to the underlying class destructor of in the class template AutoXXX destructor.
Example: Code That Causes an Incomplete Type Warning
class MyClass1; // Pre-declaration of MyClass1
// when this is cleaned up, the destructor of MyClass1 will not be called :-(
Example: Resolving an Incomplete Type Warning
//To resolve the issue, include the header file for
// MyClass1 and remove the forward declaration:
// when this is cleaned up, the destructor of MyClass1 will be called :-)
In C++, it is possible to pre-declare a class, then define pointer or reference to it. This results in a pointer to an incomplete type. This is fine as long as the code does not need to access any methods or attributes of the pre-defined class, including the destructor. The C++ specification also allows you to delete the pointer to an incomplete type. This may cause a problem, because the compiler does not know the type of the referenced object, or how to call its destructor (it might not even have a destructor). The compiler frees the memory of the object but cannot call its destructor first. This could lead to memory leaks or other issues, such as a file remaining open.
The SimbaEngine X SDK provides class templates such as
AutoValueMap to help manage your dynamically created objects. These classes will clean up an object when their instances are destroyed. However, if these class templates are instantiated on an incomplete type, the compiler does not have access to the underlying class’s destructor. Therefore, it cannot add a call to the destructor of the underlying object when compiling the destructor of these class templates.s
When deploying a driver on AIX platforms, a supported version of the system library
libc must be available on the machine. We recommend having the following version of this library for each supported version of AIX:
To download this library, see http://www-01.ibm.com/support/docview.wss?uid=isg1fileset-870201775.
If this library does not exist on the deployment machine, the following errors may be encountered: