[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