I notice that a lot of desktop apps ( such as Firefox, Google Chrome, VS 2008 etc) have a crash dump that can be sent to the software vendors for analysis purpose. I am intended to create such a crash dump myself. I am doing .Net
What are the best practices when comes to what data to collect, so that the data collected is just enough to reproduce and fix the bugs, but nothing more?
I collect exception name, stack trace and ask customer what he was doing at time of crash. Usually that is enough.
Additionally, you can establish account with Microsoft to get debugging data of your application crashes with their Windows Error Reporting.
I built a logging system that reports directly into my bug database, and it reports the following information:
A form pops up first where the user can review everything that is to be sent, and can optionally identify him/herself + write a description what he/she was doing when the problem occured. If an email is provided, the user will get an email back to track the bug report with.
You should strive to make the process of logging as non-intrusive as possible, and detailed enough that you can at least determine where to start looking.
I'm currently building a logging system that can be enabled for users that experience the same problem multiple times, where the last N items of the log can be attached to the bug report, which contains things like code flow (method calls, returns, exceptions, etc.).
Why not use the Mini dump framework that Microsoft already provides. I recommend to have a look at the functions MiniDumpCallback and MiniDumpWriteDump that allow an application to augment the mini dump with additional application specific data.