Submitted by MohammedSameer on Tue, 31/08/2004 - 15:38.
( categories: )
Software debugging & effective bug reprting
Bug reporting,
- How to report an annoying feature and/or requesting a new feature in an application.
- BE NICE!
- Talking to the developer and/or explaining why this feature is annoying or why this missing feature is important is a big plus "When I explained why the libwxgtk should be compiled with unicode/gtk2 support is important for Arabic language, The package maintainer got interested".
Debugging
- What is debugging, What's a debugger ?
- The GNU debugger "gdb"
- Compiling applications with debugging symbols.
-ggdb
- Removing the debugging symbols
"strip -S"
- Obtaining a meaningful back trace.
- What's a back trace ?
A list of steps by the application or a list of function calls lead to this situation.
- What is a core file ? What's a core dump ?
Simply the memory of the application is being dumped to a file!
- Getting a useful back trace:
- we must compile with debugging symbols
- Getting a useful back trace:
-ggdb
- from a core file
gdb <application> <core file> where
- Attaching to another process
gdb <application> <pid> where
This is useful if the application is started via a script as openoffice and mozilla.
- Directly from gdb
gdb foo [set args bar zot] r "When the crash happens: go back to the terminal, You might need to press C-C" where quit
- How to set break points.
break file.c:#
Diffs and patches
* How to generate a unified diff:
diff -Naur <orig> <modified> -N - Treat absent files as empty. -a - treat all files as text -u - Unified diff: -r - recursive
- How to exclude:
-X <file>
- How to apply a patch:
patch [--dry-run] [-p#] < patch --dry-run: Don't really modify files. -p#: strip # leading slashes from the files.
- How to remove "unapply" a patch:
patch -R -R: Reverse.
CVS:
- Using my CVS server as an example.
- How to login.
cvs -d:pserver:anonymous@uniball.dyndns.org:/var/lib/cvs login export CVSROOT=":pserver:anonymous@uniball.dyndns.org:/var/lib/cvs" cvs login
- How to checkout.
cvs -d:pserver:anonymous@uniball.dyndns.org:/var/lib/cvs co projects/illigal or export CVSROOT=":pserver:anonymous@uniball.dyndns.org:/var/lib/cvs" cvs -z3 co projects/illigal
- How to update.
cvs -z3 update
- How to request a diff
cvs diff -u or cvs diff -u <file>
Demonstration of some crashes using my "illigal operation" application
- 1: Integer by zero (Random value) - Our code crashed.
- 6: strcpy crash! (Copy to a NULL pointer) - here our application caused an external function to crash.
Bugzilla:
- Bugzilla is one of the most widely spreaded bug tracking systems.
- Registration:
- Submitting a bug:
- Gnome bugzilla: http://bugzilla.gnome.org
- Mozilla bugzilla: http://bugzilla.mozilla.org
- KDE bug tracking system: http://bugs.kde.org
- OpenOffice IssueZilla.
- We might have a wizard.
- We might have the old complicated method.
- Severety "If found": The effect of the bug on the user.
- Blocker: Non usable application.
- Critical: Crashes, causes loss of data, or is a severe memory leak.
- Major: Major loss of functionality
- Priority "If found": The importance of the bug
- Immediate: Can't test or use the application or it's a security issue.
- Urgent: I can't use an important features of the application because of it.
- High: Something is broken but the application is still usable.
- We have more bug tracking systems like gnats and the debian bug tracking system.
strace & ltrace: trace system calls, signals & library calls
Notes about interacting with the developers:
- Generally be nice and remember that the guy is a volunteer.
- Generally don't hijack a thread to include your patch, The patch is a trivial thing, This means that you attach it to the same thread if related, Otherwise start a new thread.
- Most people prefere the unified diff format.
- Try to stick to the coding standard used by the developer, This is not that important unless you are emailing a kernel patch ;-)
- Don't feel angry if the developer tell you that the software is under the GPL and you can do whatever you can.
- When reporting a bug, Report either a reproducable bug or the exact steps you followed with a backtrace if you can't reproduce it.
Links:
- Capturing Stack Traces http://bugzilla.gnome.org/getting-traces.cgi
- Emacs!: http://www.emacswiki.org ;-)
- GDB, The GNU Debugger: http://www.gnu.org/software/gdb/gdb.html
- Unified diff format and example: http://www.gnu.org/software/diffutils/manual/html_node/Detailed-Unified.html

Get GNU / Linux
News Feed
Blogs
Event Photos
Screen Shots
Polls
Popular Content
Members
Search
Wall Papers