C#exe程序崩溃,用Windows错误日志查看了信息,没找出问题所在。见下方图片
是不是该应用程序与系统不兼容啊?
数组越界了
你在callback里接收数据之前应该先判断数据的长度
不要以为只要触发了回调函数就一定有一个跟你预期一样长的数据
也有可能长度是0(客户端主动断开连接),或者数据长度过短(TCP自动分包)
你尝试下这个实例解题思路:
分析:
在win10上使用的是.Net 4.5.2,win7的.Net版本没有那么高。
把程序的.Net版本改成4.0就可以了。
方法为:在VS2015的项目上右键,选择属性,在属性的“应用程序”界面的“目标框架”里面选择.NET Framework 4,保存就可以了。
从你截图的信息来看是索引越界。而且有thread线程
比较可能的情况是,在多线程的情况下使用了非线程安全的集合。这种情况下就会偶发出现 两线程操作的集合不一致。当然这种是必然出现的,只是出现的机率比较小,小到你在你平时在另外的系统上没出现
在Windows上,程序Crash时自动生成core dump文件,相对比较麻烦点。
可以在工程中引用SetUnhandledExceptionFilter和MiniDumpWriteDump,自动生成minidmp,这样借助pdb符号文件,就可以查看程序crash的代码堆栈了,对于分析定位程序崩溃点,很方便
题主可以参考下边这篇文章里的办法,使你的程序崩溃时,自动生成minidmp
window下使用SetUnhandledExceptionFilter捕获让程序的崩溃_bingqingsuimeng的博客-CSDN博客_setunhandledexceptionfilter
还有一点,你要将生成minidmp的代码封装成一个dll,导出一个接口,比如
void SetPrivateExceptionHandler();
然后在void SetPrivateExceptionHandler()里边调用博文中的
SetUnhandledExceptionFilter(callback);
这样就可以在C#程序中,加载和使用了。
看代码应该是索引报错了,应该是取系统某个配置不对
可以看看运行环境下的.net版本是否正确,或者程序中有异常没有捕捉导致的
可以加个全局捕捉错误的代码,看看具体错误信息,参考代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Text;
using Common;
namespace testLog4N
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
BindExceptionHandler();//绑定程序中的异常处理
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
/// <summary>
/// 绑定程序中的异常处理
/// </summary>
private static void BindExceptionHandler()
{
//设置应用程序处理异常方式:ThreadException处理
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
//处理UI线程异常
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
//处理未捕获的异常
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
}
/// <summary>
/// 处理UI线程异常
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
LogHelper.ErrorLog(null, e.Exception as Exception);
}
/// <summary>
/// 处理未捕获的异常
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
LogHelper.ErrorLog(null, e.ExceptionObject as Exception);
}
}
}
框架版本不对,导致位溢出。调整config或者基础位,32和64
检查代码问题吧 System.IndexOutOfRangeException