странное падение....
От: jyuyjiyuijyu  
Дата: 12.07.13 21:07
Оценка:
Всем привет

значит собираю я программу на C++/CLI в релизе с отладочной информацией но сами файлы *.pdb не распространяю... и тут упала у клиента программа...

посдкажите как отловить любое неперехваченное исключение в программе и получить каллстек с того места где произошло это непойманное исключение ?

или без *.pdb я не смогу получить вменяемый каллстек с именами моих процедур ?
Re: странное падение....
От: Аноним  
Дата: 12.07.13 22:12
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>Всем привет


J>значит собираю я программу на C++/CLI в релизе с отладочной информацией но сами файлы *.pdb не распространяю... и тут упала у клиента программа...


J>посдкажите как отловить любое неперехваченное исключение в программе и получить каллстек с того места где произошло это непойманное исключение ?


J>или без *.pdb я не смогу получить вменяемый каллстек с именами моих процедур ?


У меня в системном журнале винды,раздел — приложения.
при падении релиз версии был записан стек вызовов и ошибка
Re[2]: странное падение....
От: Аноним  
Дата: 13.07.13 10:47
Оценка: -1
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, jyuyjiyuijyu, Вы писали:


J>>Всем привет


J>>значит собираю я программу на C++/CLI в релизе с отладочной информацией но сами файлы *.pdb не распространяю... и тут упала у клиента программа...


J>>посдкажите как отловить любое неперехваченное исключение в программе и получить каллстек с того места где произошло это непойманное исключение ?


J>>или без *.pdb я не смогу получить вменяемый каллстек с именами моих процедур ?


А>У меня в системном журнале винды,раздел — приложения.

А>при падении релиз версии был записан стек вызовов и ошибка


А у меня винХр. И в ней шиш что найдешь. Так что давайте уж реалистичные советы давать-как делать дамп и стектрейс
При падении подобной проги.
Самому важно узнать корректно работающий ответ при условии что дотнет 4версии, а винда — винХр.
Re[3]: странное падение....
От: jyuyjiyuijyu  
Дата: 13.07.13 11:50
Оценка:
вот тут кстати есть кое какой код http://stackoverflow.com/questions/49224/good-crash-reporting-library-in-c-sharp

using System;
using System.Windows.Forms;
using System.Net;
using System.Net.Mail;
using System.Threading; 

namespace ExceptionHandlerTest
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.ThreadException +=
                new ThreadExceptionEventHandler(Application_ThreadException);

            // Your designer generated commands.
        }

        static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) 
        {

            var fromAddress = new MailAddress("your Gmail address", "Your name");
            var toAddress = new MailAddress("email address where you want to receive reports", "Your name");
            const string fromPassword = "your password";
            const string subject = "exception report";
            Exception exception = e.Exception;
            string body = exception.Message + "\n" + exception.Data + "\n" + exception.StackTrace + "\n" + exception.Source;

            var smtp = new SmtpClient
            {
                Host = "smtp.gmail.com",
                Port = 587,
                EnableSsl = true,
                DeliveryMethod = SmtpDeliveryMethod.Network,
                UseDefaultCredentials = false,
                Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
            };
            using (var message = new MailMessage(fromAddress, toAddress)
            {
                Subject = subject,
                Body = body
            })
            {
                //You can also use SendAsync method instead of Send so your application begin invoking instead of waiting for send mail to complete. SendAsync(MailMessage, Object) :- Sends the specified e-mail message to an SMTP server for delivery. This method does not block the calling thread and allows the caller to pass an object to the method that is invoked when the operation completes. 
                smtp.Send(message);
            }
        }
    }
}
Re[3]: странное падение....
От: Аноним  
Дата: 15.07.13 03:44
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, jyuyjiyuijyu, Вы писали:


J>>>Всем привет


J>>>значит собираю я программу на C++/CLI в релизе с отладочной информацией но сами файлы *.pdb не распространяю... и тут упала у клиента программа...


J>>>посдкажите как отловить любое неперехваченное исключение в программе и получить каллстек с того места где произошло это непойманное исключение ?


J>>>или без *.pdb я не смогу получить вменяемый каллстек с именами моих процедур ?


А>>У меня в системном журнале винды,раздел — приложения.

А>>при падении релиз версии был записан стек вызовов и ошибка


А>А у меня винХр. И в ней шиш что найдешь. Так что давайте уж реалистичные советы давать-как делать дамп и стектрейс

А>При падении подобной проги.
А>Самому важно узнать корректно работающий ответ при условии что дотнет 4версии, а винда — винХр.
и что что хр?
у меня в 100% случаях при падении приложении даже если оно молча вылетало,писались ошибки в системный журнал...другая проблема что там хлама много то да, ну как вам предложили уже...


AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);



    static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            DialogResult result = DialogResult.Abort;
            try
            {
                StreamWriter sw = new StreamWriter(Application.StartupPath + "\\fatal_error.txt", true, System.Text.Encoding.Default);
                sw.WriteLine("\r\n-------------------------" + DateTime.Now.ToString() + "-------------------------[thread]\r\n");
                sw.Write("Message :" + e.Exception.Message + "\r\n");
                sw.Write("Stack trace:" + e.Exception.StackTrace + "\r\n");
                sw.WriteLine("\r\n------------------------------------------------------------------------\r\n");
                sw.Close();
                result = MessageBox.Show("ошибка потока :\r\n"+e.Exception.Message +e.Exception.StackTrace,"Thread Error",MessageBoxButtons.AbortRetryIgnore,MessageBoxIcon.Stop);
            }
            finally
            {
                if(result == DialogResult.Abort)
                    Application.Exit();
            }

        }

        static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            try
            {
                Exception ex =(Exception)e.ExceptionObject;
                StreamWriter sw = new StreamWriter(Application.StartupPath + "\\fatal_error.txt", true, System.Text.Encoding.Default);
                sw.WriteLine("\r\n-------------------------" + DateTime.Now.ToString() + "-------------------------[thread]\r\n");
                sw.Write("Message :" + ex.Message + "\r\n");
                sw.Write("Stack trace:" + ex.StackTrace + "\r\n");
                sw.WriteLine("\r\n------------------------------------------------------------------------\r\n");
                sw.Close();
                MessageBox.Show("ошибка :\r\n"+ex.Message + ex.StackTrace,"Thread Error",MessageBoxButtons.AbortRetryIgnore,MessageBoxIcon.Stop);
            }
            finally
            {                
                    Application.Exit();
            }
        }


но опять же с стековерфлоу вы так не поймаете если явно не укажите что нужно отлавливать такие ошибки...или при работе с сокетами я так и не смог поймать,при ошибке улетал тоже в непонятное исключение т.к поймать его не мог.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.