Tips from old CDMW wiki


Tipico link error
Se in una libreria una certa classe estende una classe interfaccia e la compilazione va a buon fine, ma poi compilando l'eseguibile che la linka tale libreria si ha un errore del tipo: " undefined reference to `vtable for ...", molto probabilmente il distruttore della classe figlia è solamente dichiarato, senza implementazione....
Eccezioni dichiarate in IDL
Se nell'implementazione di un metodo di una interfaccia IDL vengono dichiarate meno user exceptions di quante specificate nell'IDL tutto compila senza problemi; a runtime però se viene rilanciata tale eccezione il client va in core e dal core non è immediato risalire al problema in quando tale eccezione non è conosciuta...
Esplorare i .so
Questo comando è utile per verificare cosa c'è in una libreria..
strings libcdmwplatforminternallibrary.so | grep "cosa_da_cercare"
Puntatori
I puntatori vanno messi a 0 dopo essere stati cancellati!!! Una delete di un puntatore a 0 è cosa buona (no side effects)!!!
Autopointer
auto_ptr sono degli smart pointer forniti a corredo con la STL. La loro funzione è semplice controllano il ciclo di vita del puntatore che contengono.
#include
struct Test {
int val_;
};
...
{
std::auto_ptr a = std::auto_ptr(new Test);
Test* b = new Test;
a->val_ = 1;
}

// memory maintained in a has been deleted
// memory in b is still reachable !!! memory leak ...

Commenti

Anonimo ha detto…
Esplorare i .so:
Un metodo alternativo all'uso del comando string, è l'uso del comando nm che permette anche di fare il demangling dei simboli (cioè otteniamo le signature dei simboli C++):
Per esempio
find LIB_SO_DIRECTORY -name "*.so" -exec nm -AC {} \; | grep THE_SIGNATURE è un utile comando per cercare la libreria .so in cui è definito un metodo/funzione, perchè abbiamo dimenticato di inserire la dipendenza nel Makefile oppure nel CSCProperties.xml.

Post popolari in questo blog

Peer reviews catch 60% of the defects...

JNI? there's someone who remembers something?