Sponsored Content
Top Forums Programming Can't debug: assert error with gdb (no problem without) Post 302754285 by erupter on Thursday 10th of January 2013 11:06:54 AM
Old 01-10-2013
Can't debug: assert error with gdb (no problem without)

I'm sorry if the title is really criptic, but I don't know how to phrase my problem.

I know I can't really ask for a solution, and I normally wouldn't but this is really escaping my abilities.

Antefacts.
I developed a program using the zeromq messaging library.
I got to a point where the program works and then started going multithreading: moving a message poller outside of the main thread.
This is supported by the library.
So I devised my thread, passed it a pointer to some parameters (including the pointer to the zmq context) and went ahead.

The Problem
The code in the child thread is the same code I had in the parent, save for the facts that functions parameters are stored in a structure that gets passed to the child.
I followed every function in the child and the parameters are correct.
The code does even work (as it should) when run normally, but hangs with an assert when run in debug.

I tried following every function I could, built the library with debug symbols, using gdb from the console...

I got nothing useful.
I still don't understand why it fails with the debugger attached, and why it runs without.

The culprit code is the following
Code:
        if ((pgm_error->domain == PGM_ERROR_DOMAIN_SOCKET ||
             pgm_error->domain == PGM_ERROR_DOMAIN_IF) && (
             pgm_error->code != PGM_ERROR_INVAL &&
             pgm_error->code != PGM_ERROR_BADF &&
             pgm_error->code != PGM_ERROR_FAULT))

from pgm_socket.cpp:301
And here are a couple gdb outputs
Code:
Breakpoint 1, zmq::pgm_socket_t::init (this=0x7ffff0000930, 
    udp_encapsulation_=true, network_=<optimized out>) at pgm_socket.cpp:301
warning: Source file is more recent than executable.
301            if ((pgm_error->domain == PGM_ERROR_DOMAIN_SOCKET ||
(gdb) stepi
0x00007ffff786488d    301            if ((pgm_error->domain == PGM_ERROR_DOMAIN_SOCKET ||
(gdb) 
0x00007ffff786488f    301            if ((pgm_error->domain == PGM_ERROR_DOMAIN_SOCKET ||
(gdb) 
0x00007ffff7864891    301            if ((pgm_error->domain == PGM_ERROR_DOMAIN_SOCKET ||
(gdb) 
0x00007ffff7864894    301            if ((pgm_error->domain == PGM_ERROR_DOMAIN_SOCKET ||
(gdb) 
0x00007ffff7864896    301            if ((pgm_error->domain == PGM_ERROR_DOMAIN_SOCKET ||
(gdb) 
0x00007ffff7864899    301            if ((pgm_error->domain == PGM_ERROR_DOMAIN_SOCKET ||
(gdb) 
0x00007ffff786489c    301            if ((pgm_error->domain == PGM_ERROR_DOMAIN_SOCKET ||
(gdb) 
0x00007ffff786489e    301            if ((pgm_error->domain == PGM_ERROR_DOMAIN_SOCKET ||
(gdb) 
0x00007ffff78648a1    301            if ((pgm_error->domain == PGM_ERROR_DOMAIN_SOCKET ||
(gdb) 
0x00007ffff78648a3    301            if ((pgm_error->domain == PGM_ERROR_DOMAIN_SOCKET ||
(gdb) 
0x00007ffff78648a6    301            if ((pgm_error->domain == PGM_ERROR_DOMAIN_SOCKET ||
(gdb) 
376        if (sock != NULL) {
(gdb) 



Code:
Breakpoint 1, zmq::pgm_socket_t::init (this=0x7ffff0000930, 
    udp_encapsulation_=true, network_=<optimized out>) at pgm_socket.cpp:301
301            if ((pgm_error->domain == PGM_ERROR_DOMAIN_SOCKET ||
(gdb) step
376        if (sock != NULL) {
(gdb) 
377            pgm_close (sock, FALSE);
(gdb) 

There is supposedly no way (and no reason) to jump from line 301 to 376, yet it happens.
After that there is a
Code:
return -1;

that triggers the assert that kills my code.

And I'm banging my head over this without so much as a hope of understanding what to do.

I can't really hope for a solution with this, but at least a suggestion as to how to proceed.

My code (if anyone really wanted to check it out) on github is under the project "saettang".
 

10 More Discussions You Might Find Interesting

1. HP-UX

gdb problem viewing variables

Hi, I don't know if this is HP-UX specific, but I'll take my chances with this forum. ;) I'm using WDB 5.7 on HP Itanium 11.23. 'file' on my executable shows: ELF-32 executable object file - IA64 The problem is with viewing the contents of the variables. Following is a sequence that... (0 Replies)
Discussion started by: rimon
0 Replies

2. Programming

GNU GDB compile problem

I have to compile gnu-gdb 6.7 on HP-UX 11.11 with /usr/local/pa64/bin/gcc 64-bit compiler, but I'm having some problems during "make": ser-tcp.c: In function `net_open': ser-tcp.c:207: warning: passing arg 5 of `getsockopt' from incompatible pointer type make: *** Error 1 make: Leaving... (8 Replies)
Discussion started by: untamed
8 Replies

3. Programming

gdb: how to debug an executable file with a few command line papameters

If an executalbe file has several parameters, gdb can not pass parameters correctly. Let us see: run: ./executablefile1 agr1 arg2 arg3 debug: gdb executablefile1 run executalbefile1 arg1 arg2 arg3 then argv : executablefile1 argv : executablefile argv : arg1 ... (3 Replies)
Discussion started by: cdbug
3 Replies

4. Programming

gdb: problem while debug an executable file

I created one file (test.cpp)and complied it and get the executable file(test) and run it.It is giving the out put but when I am trying to debug that executable.I am getting the error -- please tell me the solutions?? Thanks in advance ..... (2 Replies)
Discussion started by: smartgupta
2 Replies

5. UNIX for Advanced & Expert Users

a question about debug using gdb(/lib32/libc.so.6: No such file or directory)

Hi all, (gdb) target remote 192.168.185.196:1389 Remote debugging using 192.168.185.196:1389 warning: Unable to find dynamic linker breakpoint function. GDB will be unable to debug shared library initializers and track explicitly loaded dynamic code. 0x2fbd0800 in ?? () (gdb) l 1 ... (0 Replies)
Discussion started by: yanglei_fage
0 Replies

6. Programming

Debug two process Using GDB

Hi All I know How to attach a process to beubg it .But for my application I am using client as well server.Both are two separate process .Suppose I need to debug both .How to attach both of them together .Or I have to attach them separetly . Suppose client process id is 1325 and server is... (2 Replies)
Discussion started by: mr_deb
2 Replies

7. Programming

ddd/gdb debugger problem

I hope this is the right thread - not sure if it belongs in the Linux forum. Anyway, I'm having an issue with ddd and gdb. When using ddd to run gdb, there are extra parameters being appended, and my program is picking them up. I'm running on Ubuntu 11.04... Here's my command line entry - ... (1 Reply)
Discussion started by: jalburger
1 Replies

8. UNIX for Dummies Questions & Answers

GDB Debugging Problem

I have added some code in my file. I have created executable rpm file of our code and also I have created debuginfo and debugsource files and installed all three. But when I debug in gdb I see the the code changes in soucre file. But the break point does not hit at that place as if it did not... (1 Reply)
Discussion started by: rupeshkp728
1 Replies

9. Programming

GDB problem accessing static variables in C

Hi, Can anyone explain this please..... This is on AIX with GDB (tried a few versions). It only happens when program compiled in 64 bit and only with static variables.... A simple test program... ### snip #include <stdio.h> main() { static int n; n = 6; printf("hello %d\n", n);... (0 Replies)
Discussion started by: bagpussnz
0 Replies

10. Programming

Odd behavior from GDB while trying to cross-debug an embedded Linux application.

Some background: The application normally runs on an embedded platform. Currently, for development purposes, I have the rootfs located @ /exports and the target is communicating over NFS. That way I can make a change on my local system, save the application @ /exports, and run the altered... (4 Replies)
Discussion started by: Circuits
4 Replies
All times are GMT -4. The time now is 05:31 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy