GDB Hopelessly broken (CentOS 5.2, debugging Apache QPid)

Joshua Kramer
2009-04-18T03:33:04Z

Hello Everyone,

I'm having some really bizarre problems debugging Apache Qpid under
CentOS 5.2, and I'm wondering if anyone can shed some light on this.
The application is compiled with -ggdb and no optimization (the -O2
specified in the makefile was removed).

GDB (as supplied by the OS) is exhibiting odd behavior. First, I keep
getting the error about the source files being newer than the
executable, even though:

1. I have manually deleted all object files and executables, then ran
make, and
2. I verified that the executable is 30 minutes newer than any source file.

Next, it appears that some code does not get compiled. If I set a
breakpoint on line 335 of a certain file, it does not stop until line
339. Also, some variables do not get declared. In the code example
shown below, the seContext variable is never declared - that is, if I
set the breakpoint on lines directly after I assign something to that
variable, when gdb stops and I enter the command 'print seContext', gdb
replies that there is no seContext in this scope.

Are these things a result of unseen compiler optimizations? Any help is
greatly appreciated.

Thanks!
-Joshua Kramer

(gdb) list
/home/josh/dev/qpid/trunk/qpid/cpp/src/qpid/broker/SessionAdapter.cpp:325
320
321 void SessionAdapter::QueueHandlerImpl::declare(const string&
name, const string& alternateExchange,
322 bool passive,
bool durable, bool exclusive,
323 bool autoDelete,
const qpid::framing::FieldTable& arguments)
324 {
325 AclModule* acl = getBroker().getAcl();
326
327 std::string seContext;
328 //if (arguments.isSet("secontext"))
329 {

(gdb) list
/home/josh/dev/qpid/trunk/qpid/cpp/src/qpid/broker/SessionAdapter.cpp:343
338 params.insert(make_pair(acl::PROP_EXCLUSIVE,
std::string(exclusive ? "true" : "false")));
339 params.insert(make_pair(acl::PROP_AUTODELETE,
std::string(autoDelete ? "true" : "false")));
340
341 // JPK: Create some parameters from the arguments.
342
343 //if (arguments.isSet("secontext"))
344 {
345 seContext = arguments.getAsString("secontext");
346 params.insert(make_pair(acl::PROP_SECONTEXT,
seContext));
347 }
(gdb)