[mythtv-commits] Ticket #3589: New compile-type: release-dbg

MythTV mythtv at cvs.mythtv.org
Sat Jun 9 20:53:23 UTC 2007


#3589: New compile-type: release-dbg
-------------------------+--------------------------------------------------
 Reporter:  anonymous    |       Owner:  ijr    
     Type:  enhancement  |      Status:  new    
 Priority:  minor        |   Milestone:  unknown
Component:  mythtv       |     Version:  head   
 Severity:  medium       |  
-------------------------+--------------------------------------------------
 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=<value optimized out>) 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=<value optimized out>) 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 #

-- 
Ticket URL: <http://svn.mythtv.org/trac/ticket/3589>
MythTV <http://svn.mythtv.org/trac>
MythTV


More information about the mythtv-commits mailing list