C#VS2015在win10上开发的程序到win7上运行崩溃,事件名称:clR20r3

C#exe程序崩溃,用Windows错误日志查看了信息,没找出问题所在。见下方图片

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

是不是该应用程序与系统不兼容啊?

img

img


下标越界了。

数组越界了
你在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