id,summary,reporter,owner,description,type,status,priority,milestone,component,version,severity,resolution,keywords,cc,mlocked 3589,New compile-type: release-dbg,anonymous,Isaac Richards,"The attached patch adds a new compile-type which I've called release-dbg. This is a release compile with debug (-g) and utilising the .gnu_debuglink tag. The objdump man page has the details but essentially what happens is: * everything is built with -g * after linking all the debug symbols are stripped out of the binary to a .dbg file * a .gnu_debuglink tag is added to the binary which points to the .dbg file This should help analysis of core files and for those instances when you really need to run the release version under gdb. Caveats: * The resulting binaries are a little bit bigger (about 7%) but still not as big as a debug build * The optimiser is still on so whilst source level debugging is definitely possible it can be a bit hard to follow sometimes * To actually use the .dbg files in gdb you need to copy them to the same location of the binaries. I haven't added any logic to do this during 'make install' partially because not everyone will need them all the time, but mostly because I am lazy. * I don't really know what I am doing with gmake - I just hacked this in. I'm sure in its current state this patch breaks other builds (e.g. mac). Here a little proof that it works: myth_master mythtv # objdump -e `which mythbackend` objdump: /usr/local/bin/mythbackend: no recognized debugging information myth_master mythtv # find . -name ""*dbg"" -type f -exec ln -s `pwd`/{} /usr/local/bin \; myth_master mythtv # gdb `which mythbackend` `pidof mythbackend` GNU gdb 6.6 Copyright (C) 2006 Free Software Foundation, Inc. <...> Loaded symbols for /lib/libnss_files.so.2 0x00002b5e926cc852 in select () from /lib/libc.so.6 (gdb) bt #0 0x00002b5e926cc852 in select () from /lib/libc.so.6 #1 0x00002b5e913ed8e0 in QEventLoop::processEvents () from /usr/qt/3/lib/libqt-mt.so.3 #2 0x00002b5e9144b382 in QEventLoop::enterLoop () from /usr/qt/3/lib/libqt-mt.so.3 #3 0x00002b5e9144b232 in QEventLoop::exec () from /usr/qt/3/lib/libqt-mt.so.3 #4 0x0000000000443cfe in main (argc=6, argv=) at main.cpp:670 #5 0x00002b5e92634134 in __libc_start_main () from /lib/libc.so.6 #6 0x0000000000411bb9 in _start () (gdb) frame 4 #4 0x0000000000443cfe in main (argc=6, argv=) at main.cpp:670 670 a.exec(); (gdb) list 665 } 666 } 667 668 StorageGroup::CheckAllStorageGroupDirs(); 669 670 a.exec(); 671 672 gContext->LogEntry(""mythbackend"", LP_INFO, ""MythBackend exiting"", """"); 673 cleanup(); 674 (gdb) [1]+ Stopped gdb `which mythbackend` `pidof mythbackend` myth_master mythtv # ls -la /proc/`pidof gdb`/fd/ total 0 dr-x------ 2 root root 0 Jun 9 16:50 . dr-xr-xr-x 5 root root 0 Jun 9 16:50 .. lrwx------ 1 root root 64 Jun 9 16:50 0 -> /dev/pts/1 lrwx------ 1 root root 64 Jun 9 16:50 1 -> /dev/pts/1 lrwx------ 1 root root 64 Jun 9 16:50 2 -> /dev/pts/1 lr-x------ 1 root root 64 Jun 9 16:50 3 -> pipe:[224917] l-wx------ 1 root root 64 Jun 9 16:50 4 -> pipe:[224917] lr-x------ 1 root root 64 Jun 9 16:50 5 -> /usr/local/bin/mythbackend lr-x------ 1 root root 64 Jun 9 16:50 7 -> /root/Software/mythtv/trunk/mythtv/programs/mythbackend/mythbackend.dbg myth_master mythtv # ",enhancement,new,minor,unknown,mythtv,head,medium,,,,0