How To Report A Bug
-------------------

Some simple advice on making your bug report more useful (and thus more
likely to get answered and fixed):

1) Post as much information as possible.  

	This means we need more information than a simple
	"MS Word crashes whenever I run it.  Do you know why?"
	Include at least the following information:

	- Version of Wine you're using (run 'wine -v')
	- Operating system you're using, what distribution (if any), and what
		version
	- Compiler and version (run 'gcc -v')
	- Windows version, if installed
	- Program you're trying to run, its version number, and a URL for 
		where the program can be obtained (if available)
	- Command line you used to start wine
	- Any other information you think may be relevant or helpful, such as
		X server version in case of X problems, libc version etc.

2) Re-run the program with the -debugmsg +relay,+snoop option 
   (i.e., 'wine -debugmsg +relay,+snoop sol.exe').

	If Wine crashes while running your program, it is important that we
	have this information to have a chance at figuring out what is causing
	the crash.  This can put out quite a lot (several MB) of information,
	though, so it's best to output it to a file.  When the Wine-dbg> prompt
	appears, type 'quit'.

	To accomplish this, use the following commands:

	tcsh and other csh-like shells:

	    wine -debugmsg +relay,+snoop [other_options] program_name |& tee filename.out
	    tail -100 filename.out > report_file

	bash and other sh-like shells:

	    wine -debugmsg +relay,+snoop [other_options] program_name 2>&1 | tee filename.out
	    tail -100 filename.out > report_file

	'report_file' will now contain the last hundred lines of the debugging
	output, including the register dump and backtrace, which are the most
	important pieces of information.  Please do not delete this part, even
	if you don't understand what it means.

3) Post your report to the newsgroup comp.emulators.ms-windows.wine

	In your post, include all of the information from part 1), and insert
	the text from the output file in part 2).  If you do this, your chances
	of receiving some sort of helpful response should be very good.

4) Questions and comments

	If after reading this document there is something you couldn't figure
	out, or think could be explained better, or that should have been
	included, please post to comp.emulators.ms-windows.wine to let us know
	how this document can be improved.
