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 [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.
