Windows näyttää ohjelman kaatuessa yleensä mitään kertomattoman ilmoituksen "Ohjelma lakkasi toimimasta". Jotkut ohjelmat näyttävät kuitenkin "paremman" virheilmoituksen, esim (suomeksi ja englanniksi):
lainaus:
Sovellusvirhe
Käsky osoitteessa "(osoite)" viittasi muistiin osoitteessa "(osoite)". Muisti ei voi olla "(read/written)".
Lopeta ohjelma napsauttamalla OK
lainaus:
Application error
The instruction at "(address)" referenced memory at "(address)". The memory could not be "(read/written)".
Click on OK to terminate the program
http://www.beetrootstreet.com/_media/images/
http://i52.tinypic.com/73cr5f.png
Nämä lienevät Windowsin mukana tulevia oletusvirheilmoituksia, eikä sovellusten määrittämiä (SetUnhandledExceptionFilter tms.).
Miten voin käskeä omaa ohjelmaani käyttämään näitä ilmoituksia "ohjelma lakkasi toimimasta" -ilmoituksen sijasta?
Itse teen ainakin C# kanssa näin:
static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { try { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } catch (Exception ex) { string debug = ""; debug += "Source: " + ex.Source + Environment.NewLine; debug += "Message: " + ex.Message + Environment.NewLine; debug += "HelpLink: " + ex.HelpLink + Environment.NewLine; debug += "ToString: " + ex.ToString() + Environment.NewLine; DebugInfo.ShowInfoDialog(debug); } } }
En sitten tiedä miten oikein tai väärin tämä on, mutta toimii ainakin itsellä tarpeeksi hyvin omissa pikkuprojekteissani. DebugInfo on formi jossa on normaali textbox. Tätä voi sitten varmaan jalostaa vaikka niin, että se lähettäisi sähköpostilla nuo tiedot.
Aihe on jo aika vanha, joten et voi enää vastata siihen.