I am having problems
debugging an application under Linux using gdb and the boost threads
library. The problem I am basically having is the stack trace is only
going back to the join statement rather than to point in the program that
caused the crash. My application is reasonable complicated so to
reproduce it I have created a buggy version of the
helloword4 tutorial. The slightly modified the
helloworld4 tutorial program to loop 7 times and then crash. The stack
trace given in gdb points back to the join statement rather than the source code
line that generated the error. Has anyone else come across this
problem?
// Copyright (C)
2001-2003
// William E. Kempf
//
// Permission to use, copy, modify,
distribute and sell this software
// and its documentation for any purpose is
hereby granted without fee,
// provided that the above copyright notice
appear in all copies and
// that both that copyright notice and this
permission notice appear
// in supporting documentation. William E.
Kempf makes no representations
// about the suitability of this software for
any purpose.
// It is provided "as is" without express or implied
warranty.
#include
<boost/thread/thread.hpp>
#include <boost/bind.hpp>
#include
<iostream>
#include <string.h>
void
helloworld(const char* who)
{
for(int i = 0 ; i < 10; i++
)
{
std::cout << who << "says, \"Hello
World.\" " << i <<
std::endl;
sleep(2);
if(i > 7
)
{
std::cout << " will crash "
<< std::endl;
char * p =
NULL;
strcpy(p,"abcde "); // CAUSES
Segmentation FAULT here but gdb
}
}
}
int
main()
{
boost::thread
thrd(boost::bind(&helloworld, "Bob"));
thrd.join(); // Stack trace STOPS HERE
}