This is the mail archive of the gdb@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Corruption in C++ constructor


Hi,
 Sorry for the long post but i'm stuck . Can someone help me ?

 I'm debugging a multithreaded program. I've inlined the headerfile below.
Now when i print selectConstruct i get all the vectors with M_start as 0 .

Now when i call the constructor ie when the selectConstruct is passed
by value to the function fetch_custom_sql_query to create a temporary
object it changes the M_start and M_finish as below in the second
snapshot print *this.

As you can see limit is -1 but it is corrupted after the call to
constructor ie p *this.

Is this a corruption , how do i debug this ?

2873            int rc =
_db->fetch_custom_sql_query(rwc.GetQueryName(),selectConstruct,
HandleCustomSqlQueryResponse, (void*)&holder);
(gdb) p selectConstruct
$1 = {distinct = false, colsToBeSelected = {cols =
{<std::_Vector_base<dbCol, std::allocator<dbCol> >> = {_M_impl =
{<std::allocator<dbCol>> = {<__gnu_cxx::new_allocator<dbCol>> = {<No
data fields>}, <No data fields>}, _M_start = 0x0, _M_finish = 0x0,
_M_end_of_storage = 0x0}}, <No data fields>}}, tableName = {static
npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> =
{<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data
fields>}, _M_p = 0x3dd36f32d8 ""}}, where = {whereExprs =
{<std::_Vector_base<whereExpr, std::allocator<whereExpr> >> = {_M_impl
= {<std::allocator<whereExpr>> =
{<__gnu_cxx::new_allocator<whereExpr>> = {<No data fields>}, <No data
fields>}, _M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}},
<No data fields>}, ops = {<std::_Vector_base<adjoinOperator,
std::allocator<adjoinOperator> >> = {_M_impl =
{<std::allocator<adjoinOperator>> =
{<__gnu_cxx::new_allocator<adjoinOperator>> = {<No data fields>}, <No
data fields>}, _M_start = 0x0, _M_finish = 0x0, _M_end_of_storage =
0x0}}, <No data fields>}, namespaceCounts =
{<std::_Vector_base<unsigned int, std::allocator<unsigned int> >> =
{_M_impl = {<std::allocator<unsigned int>> =
{<__gnu_cxx::new_allocator<unsigned int>> = {<No data fields>}, <No
data fields>}, _M_start = 0x0, _M_finish = 0x0, _M_end_of_storage =
0x0}}, <No data fields>}, useAsON = false}, groupBy = {cols =
{<std::_Vector_base<dbCol, std::allocator<dbCol> >> = {_M_impl =
{<std::allocator<dbCol>> = {<__gnu_cxx::new_allocator<dbCol>> = {<No
data fields>}, <No data fields>}, _M_start = 0x0, _M_finish = 0x0,
_M_end_of_storage = 0x0}}, <No data fields>}}, orders = {orders =
{<std::_Vector_base<orderingTerm, std::allocator<orderingTerm> >> =
{_M_impl = {<std::allocator<orderingTerm>> =
{<__gnu_cxx::new_allocator<orderingTerm>> = {<No data fields>}, <No
data fields>}, _M_start = 0x0, _M_finish = 0x0, _M_end_of_storage =
0x0}}, <No data fields>}}, limit = -1}
(gdb) stepi
0x00007ffff0df9b49      2873            int rc =
_db->fetch_custom_sql_query(rwc.GetQueryName(),selectConstruct,
HandleCustomSqlQueryResponse, (void*)&holder);
(gdb) stepi
0x00007ffff0df9b50      2873            int rc =
_db->fetch_custom_sql_query(rwc.GetQueryName(),selectConstruct,
HandleCustomSqlQueryResponse, (void*)&holder);
(gdb) stepi
0x00007ffff0df9b53      2873            int rc =
_db->fetch_custom_sql_query(rwc.GetQueryName(),selectConstruct,
HandleCustomSqlQueryResponse, (void*)&holder);
(gdb) stepi
0x00007ffff0df9b5b      2873            int rc =
_db->fetch_custom_sql_query(rwc.GetQueryName(),selectConstruct,
HandleCustomSqlQueryResponse, (void*)&holder);
(gdb) stepi
0x00007ffff0df9b5e      2873            int rc =
_db->fetch_custom_sql_query(rwc.GetQueryName(),selectConstruct,
HandleCustomSqlQueryResponse, (void*)&holder);
(gdb) stepi
0x00007ffff0da8000 in simpleSelectConstruct::simpleSelectConstruct ()
from /opt/OV/lbin/OpsAgt/libDMLSegment.so
(gdb) stepi
simpleSelectConstruct::simpleSelectConstruct (this=0x7fffdbffdbb0) at
/home/parakkal/COLLABNET_11.10_NEW/hpsw-oa/AgentFramework/cpp/src/include/OpsAgt/DBsupports.h:170
170     class simpleSelectConstruct{
/include/OpsAgt/DBsupports.h:170
170     class simpleSelectConstruct{
(gdb) p *this
$2 = {distinct = false, colsToBeSelected = {cols =
{<std::_Vector_base<dbCol, std::allocator<dbCol> >> = {_M_impl =
{<std::allocator<dbCol>> = {<__gnu_cxx::new_allocator<dbCol>> = {<No
data fields>}, <No data fields>}, _M_start = 0x0, _M_finish = 0x0,
_M_end_of_storage = 0x0}}, <No data fields>}}, tableName = {static
npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> =
{<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data
fields>}, _M_p = 0x0}}, where = {whereExprs =
{<std::_Vector_base<whereExpr, std::allocator<whereExpr> >> = {_M_impl
= {<std::allocator<whereExpr>> =
{<__gnu_cxx::new_allocator<whereExpr>> = {<No data fields>}, <No data
fields>}, _M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}},
<No data fields>}, ops = {<std::_Vector_base<adjoinOperator,
std::allocator<adjoinOperator> >> = {_M_impl =
{<std::allocator<adjoinOperator>> =
{<__gnu_cxx::new_allocator<adjoinOperator>> = {<No data fields>}, <No
data fields>}, _M_start = 0x0, _M_finish = 0x3dd34bd704,
_M_end_of_storage = 0x7ffff7ca52b0}}, <No data fields>},
namespaceCounts = {<std::_Vector_base<unsigned int,
std::allocator<unsigned int> >> = {_M_impl = {<std::allocator<unsigned
int>> = {<__gnu_cxx::new_allocator<unsigned int>> = {<No data
fields>}, <No data fields>}, _M_start = 0x7fffdbffe910, _M_finish =
0x6, _M_end_of_storage = 0x4e}}, <No data fields>}, useAsON = false},
groupBy = {cols = {<std::_Vector_base<dbCol, std::allocator<dbCol> >>
= {_M_impl = {<std::allocator<dbCol>> =
{<__gnu_cxx::new_allocator<dbCol>> = {<No data fields>}, <No data
fields>}, _M_start = 0x7fffdbffe910, _M_finish = 0x0,
_M_end_of_storage = 0x7ffff6f54d1f}}, <No data fields>}}, orders =
{orders = {<std::_Vector_base<orderingTerm,
std::allocator<orderingTerm> >> = {_M_impl =
{<std::allocator<orderingTerm>> =
{<__gnu_cxx::new_allocator<orderingTerm>> = {<No data fields>}, <No
data fields>}, _M_start = 0x7ffff7ca52b0, _M_finish = 0x7ffff6f5584d,
_M_end_of_storage = 0x5509f0}}, <No data fields>}}, limit =
-603988688}
(gdb) stepi
0x00007ffff0e11892      170     class simpleSelectConstruct{
(gdb) stepi
0x00007ffff0e11894      170     class simpleSelectConstruct{
(gdb) stepi
0x00007ffff0e11896      170     class simpleSelectConstruct{
(gdb) stepi
0x00007ffff0e11898      170     class simpleSelectConstruct{
(gdb) p *this
$3 = {distinct = false, colsToBeSelected = {cols =
{<std::_Vector_base<dbCol, std::allocator<dbCol> >> = {_M_impl =
{<std::allocator<dbCol>> = {<__gnu_cxx::new_allocator<dbCol>> = {<No
data fields>}, <No data fields>}, _M_start = 0x0, _M_finish = 0x0,
_M_end_of_storage = 0x0}}, <No data fields>}}, tableName = {static
npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> =
{<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data
fields>}, _M_p = 0x0}}, where = {whereExprs =
{<std::_Vector_base<whereExpr, std::allocator<whereExpr> >> = {_M_impl
= {<std::allocator<whereExpr>> =
{<__gnu_cxx::new_allocator<whereExpr>> = {<No data fields>}, <No data
fields>}, _M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}},
<No data fields>}, ops = {<std::_Vector_base<adjoinOperator,
std::allocator<adjoinOperator> >> = {_M_impl =
{<std::allocator<adjoinOperator>> =
{<__gnu_cxx::new_allocator<adjoinOperator>> = {<No data fields>}, <No
data fields>}, _M_start = 0x0, _M_finish = 0x3dd34bd704,
_M_end_of_storage = 0x7ffff7ca52b0}}, <No data fields>},
namespaceCounts = {<std::_Vector_base<unsigned int,
std::allocator<unsigned int> >> = {_M_impl = {<std::allocator<unsigned
int>> = {<__gnu_cxx::new_allocator<unsigned int>> = {<No data
fields>}, <No data fields>}, _M_start = 0x7fffdbffe910, _M_finish =
0x6, _M_end_of_storage = 0x4e}}, <No data fields>}, useAsON = false},
groupBy = {cols = {<std::_Vector_base<dbCol, std::allocator<dbCol> >>
= {_M_impl = {<std::allocator<dbCol>> =
{<__gnu_cxx::new_allocator<dbCol>> = {<No data fields>}, <No data
fields>}, _M_start = 0x7fffdbffe910, _M_finish = 0x0,
_M_end_of_storage = 0x7ffff6f54d1f}}, <No data fields>}}, orders =
{orders = {<std::_Vector_base<orderingTerm,
std::allocator<orderingTerm> >> = {_M_impl =
{<std::allocator<orderingTerm>> =
{<__gnu_cxx::new_allocator<orderingTerm>> = {<No data fields>}, <No
data fields>}, _M_start = 0x7ffff7ca52b0, _M_finish = 0x7ffff6f5584d,
_M_end_of_storage = 0x5509f0}}, <No data fields>}}, limit =
-603988688}
(gdb)


#ifndef my_db_supports_h
#define my_db_supports_h

#include <string>
#include <vector>
namespace std {}
using namespace std;

#include "OvXplStr/NlString.h"

#if defined(WINDOWS)
  #if defined(EXPORT_LIB)
    #define DBSupportsInterface __declspec(dllexport)
  #else
    #define DBSupportsInterface //__declspec(dllimport)
  #endif
#else
  #define DBSupportsInterface
#endif

typedef enum
{
 data_type_integer = 0,
 data_type_text,
 data_type_real,
 data_type_numeric,
 data_type_time,
 data_type_autokey,
 data_type_none
} db_ColumnDataType;

typedef enum
{
 ascending = 0,
 descending
} order_e;

typedef enum
{
 is_equal_to = 0,
 is_not_equal_to,
 is_greater_than,
 is_greater_than_or_equal,
 is_less_than,
 is_less_than_or_equal,
 is_in
} whereOperator;

typedef enum
{
 _AND_ = 100,
 _OR_
} adjoinOperator;

class dbColumnDef {

 protected:
   OvXplStr::String_t name;
   db_ColumnDataType type;
   bool isPartOfPrimaryKey;
   int isPartOfUniqueness;
   bool isForeignKey;
   OvXplStr::String_t foreignTableName;
   OvXplStr::String_t foreignColumnName;

 public:

   DBSupportsInterface dbColumnDef();
   DBSupportsInterface dbColumnDef(const dbColumnDef & _dbCol);
   DBSupportsInterface void setName(OvXplStr::String_t _name);
   DBSupportsInterface void setType(db_ColumnDataType _type);
   DBSupportsInterface void setIsPartOfPrimaryKey(bool _v);
   DBSupportsInterface void setIsPartOfUniqueness(int _v);
   DBSupportsInterface void setForeignKeyReference(OvXplStr::String_t
_fTableName, OvXplStr::String_t _fColName);

   DBSupportsInterface OvXplStr::String_t getName();
   DBSupportsInterface db_ColumnDataType getType();
   DBSupportsInterface bool getIsPartOfPrimaryKey();
   DBSupportsInterface int getIsPartOfUniqueness();
   DBSupportsInterface bool getIsForeignKey();
   DBSupportsInterface OvXplStr::String_t getForeignTableName();
   DBSupportsInterface OvXplStr::String_t getForeignColumnName();

};

class dbColumnDefs{
   private:
      vector<dbColumnDef> cols;

   public:
      DBSupportsInterface void addColumnDef(dbColumnDef _col);
      DBSupportsInterface dbColumnDef& getColumnDefAt(int i);
      DBSupportsInterface int getNumColumnDefs();
};

class dbCol{
 public:
   OvXplStr::String_t colName;
   db_ColumnDataType type;
   DBSupportsInterface dbCol();
};

class dbColValue: public dbCol{
 public:
   OvXplStr::String_t value;
   DBSupportsInterface dbColValue();
};

class dbColValues{

 protected:
   vector<dbColValue> vals;

 public:
   DBSupportsInterface void addValue(dbColValue _val);
   DBSupportsInterface dbColValue & getValueAt(int i);
   DBSupportsInterface int getNumValues();
};

class dbCols{

 protected:
   vector<dbCol> cols;

 public:
   DBSupportsInterface void addColumn(dbCol _val);
   DBSupportsInterface dbCol & getColumnAt(int i);
   DBSupportsInterface int getNumColumns();
};

class whereExpr{
 public:
   dbCol col;
   whereOperator op;
   OvXplStr::String_t value;
   vector<OvXplStr::String_t> is_in_list;
};

class orderingTerm{
 public:
   dbCol col;
   order_e order;
};

class orderBy{
 public:
   vector<orderingTerm> orders;
   DBSupportsInterface void addOrder(orderingTerm _o);
   OvXplStr::String_t getOrderByConstruct();
};

class whereConstruct{
 protected:
   vector<whereExpr> whereExprs;
   vector<adjoinOperator> ops;
   vector<unsigned int> namespaceCounts;
   bool useAsON;
 public:
   DBSupportsInterface whereConstruct(bool b = false) {
      useAsON=b;
   }
   DBSupportsInterface void addWhereExpr(whereExpr _w);
   DBSupportsInterface void addAdjoiningOp(adjoinOperator _op);
   DBSupportsInterface void addNameSpaceBoundary(unsigned int);
   DBSupportsInterface OvXplStr::String_t getWhereConstruct();
   DBSupportsInterface size_t getNumWhereExprs();
   DBSupportsInterface bool UseAsON();
};

class simpleSelectConstruct{

 public:
   DBSupportsInterface simpleSelectConstruct()
   {
      distinct=false;
      limit=-1;
   }
   bool distinct;
   dbCols colsToBeSelected;
   string tableName;
   whereConstruct where;
   dbCols groupBy;
   orderBy orders;
   int limit;
};

class dbUtils
{
public:
    static OvXplStr::String_t makeEscapedString(OvXplStr::String_t
unEscapedStr);
};

#endif /* my_db_supports_h */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]