On 04/12/2007, Graham Reitz <grahamreitz@stripped> wrote:
> Below is the rest of it...
>
> 5) The simple main function
> 6) gdb run with backtrace
>
> 5) Code:
> #include <iostream>
> #include <string>
> #include <mysql++.h>
>
> using namespace std;
> using namespace mysqlpp;
>
> int main (int argc, char * const argv[])
> {
> string database_name = "tac_db_rev_4";
> string ip_address = "X.X.X.X";
> string username = "admin";
> string password = "admin";
> string client_id = "graham";
> string client_pw = "reitz";
> string error_msg;
>
> cout << "Attempting to connect to the database...";
>
> Connection m_connection(database_name.c_str(),
> ip_address.c_str(),
> username.c_str(),
> password.c_str(),
> 3306,
> false,
> 15);
>
> Result client_id_result;
>
> try
> {
>
> cout << "connected to the database\n";
>
> Query client_id_query = m_connection.query();
>
> client_id_query <<
> "select client_id from clients where client_user_name ="
> << quote_only << client_id << " and client_password ="
> << quote_only << client_pw;
>
> cout << "Query created: " << client_id_query.preview() <<
> endl;
>
> client_id_result = client_id_query.store();
>
> if (client_id_result)
> {
> cout << "Result received = " << client_id_result.rows()
> << endl;
> Row client_id_row;
> Row::size_type i = 0;
> client_id_row = client_id_result.at(i);
> }
>
> Row client_id_row;
> // The "=" versus "==" syntax is more mysqlpp bs
> if (client_id_row = client_id_result.at(0))
> {
> cout << client_id_row.at(0) << endl;
> return client_id_row.at(0);
> }
> }
> catch (exception &e)
> {
> cout << "exception occurred...";
> cout << e.what() << endl;
> }
> catch (...)
> {
> error_msg = "Unknown exception";
> cout << error_msg << endl;
> }
>
> m_connection.close();
>
> return 0;
> }
>
> 6) gdb run with backtrace
>
> (gdb) run
> Starting program: /Users/grahamreitz/Development/Projects/tac/build/
> Debug/tac
> Reading symbols for shared libraries ++++++... done
> Attempting to connect to the database...connected to the database
> Query created: select client_id from clients where client_user_name
> ='graham' and client_password ='reitz'
> Result received = 1
> /Developer/SDKs/MacOSX10.5.sdk/usr/include/c++/4.0.0/bits/
This isn't a crash. This is a failed assertion in debug mode. It
even tells you why:
> stl_algobase.h:382:
> error: function requires a valid iterator range [__first, __last).
>
> Objects involved in the operation:
> iterator "__first" @ 0x0xbfffee50 {
> type = N10__gnu_norm19_Bit_const_iteratorE;
> }
> iterator "__last" @ 0x0xbfffee58 {
> type = N10__gnu_norm19_Bit_const_iteratorE;
> }
>
> Program received signal SIGABRT, Aborted.
> 0x9264e47a in __kill ()
> (gdb) backtrace
> #0 0x9264e47a in __kill ()
> #1 0x9264e46d in kill$UNIX2003 ()
> #2 0x926c5782 in raise ()
> #3 0x926d4d3f in abort ()
> #4 0x92b476f9 in __gnu_debug::_Error_formatter::_M_error ()
> #5 0x00005bdb in std::copy<__gnu_norm::_Bit_const_iterator,
> __gnu_norm::_Bit_iterator> (__first={<__gnu_norm::_Bit_iterator_base>
> = {<> = {<No data fields>}, _M_p = 0x700bc4, _M_offset = 3221222728},
> <No data fields>}, __last={<__gnu_norm::_Bit_iterator_base> = {<>
> =
> {<No data fields>}, _M_p = 0xbffff601, _M_offset = 2413828210}, <No
> data fields>}, __result={<__gnu_norm::_Bit_iterator_base> = {<> =
> {<No
> data fields>}, _M_p = 0x1000000, _M_offset = 0}, <No data fields>}) at
> stl_algobase.h:382
> #6 0x00005cd6 in __gnu_norm::vector<bool, std::allocator<bool>
> > ::operator= (this=0xbffff4c8, __x=@0xbffff5f0) at stl_bvector.h:709
> #7 0x00005d3a in __gnu_debug_def::vector<bool, std::allocator<bool>
> > ::operator= (this=0xbffff4c8, __x=@0xbffff5f0) at debug/vector:100
> #8 0x00006eb4 in mysqlpp::Row::operator= (this=0xbffff4a0) at row.h:54
> #9 0x00001ef9 in main (argc=1, argv=0xbffff6f0) at /Users/grahamreitz/
> Development/Projects/tac/main.cpp:51
>
Libstdc++'s debug mode is documented here:
http://gcc.gnu.org/onlinedocs/libstdc++/debug.html#safe
Xcode might have its own relevant docs you should also read.
The code violates a precondition of std::copy() that isn't detected in
release builds, but causes an assertion failure in debug mode.
Jon
| Thread |
|---|
| • Release works, Debug (still) crashes on OS X Leopard, Xcode 3.0 (Part 2) | Graham Reitz | 4 Dec |
| • Re: Release works, Debug (still) crashes on OS X Leopard, Xcode 3.0 (Part 2) [SOLVED] | Graham Reitz | 5 Dec |
| • Re: Release works, Debug (still) crashes on OS X Leopard, Xcode 3.0 (Part 2) [SOLVED] | Graham Reitz | 5 Dec |
| • Re: Release works, Debug (still) crashes on OS X Leopard, Xcode 3.0(Part 2) [SOLVED] | Warren Young | 5 Dec |
| • Re: Release works, Debug (still) crashes on OS X Leopard, Xcode 3.0 (Part 2) [SOLVED] | Jonathan Wakely | 5 Dec |
| • Re: Release works, Debug (still) crashes on OS X Leopard, Xcode 3.0 (Part 2) [SOLVED] | Graham Reitz | 5 Dec |
| • Re: Release works, Debug (still) crashes on OS X Leopard, Xcode 3.0 (Part 2) [SOLVED] | Jonathan Wakely | 6 Dec |
| • Re: Release works, Debug (still) crashes on OS X Leopard, Xcode 3.0(Part 2) [SOLVED] | Warren Young | 6 Dec |
| • Re: Release works, Debug (still) crashes on OS X Leopard, Xcode 3.0 (Part 2) [SOLVED] | Graham Reitz | 6 Dec |
| • Re: Release works, Debug (still) crashes on OS X Leopard, Xcode 3.0 | Graham Reitz | 6 Dec |
| • Re: Release works, Debug (still) crashes on OS X Leopard, Xcode 3.0 | Graham Reitz | 7 Dec |
| • Re: Release works, Debug (still) crashes on OS X Leopard, Xcode 3.0 | Graham Reitz | 7 Dec |
| • Re: Release works, Debug (still) crashes on OS X Leopard, Xcode 3.0 | Graham Reitz | 7 Dec |
| • Re: Release works, Debug (still) crashes on OS X Leopard, Xcode 3.0 (Part 2) [SOLVED] | Jonathan Wakely | 7 Dec |
| • Re: Release works, Debug (still) crashes on OS X Leopard, Xcode 3.0(Part 2) [SOLVED] | Warren Young | 10 Jan |
| • Re: Release works, Debug (still) crashes on OS X Leopard, Xcode 3.0 (Part 2) | Jonathan Wakely | 5 Dec |