如何在 生产环境 找bug

新手 业余c# 程序员一枚 平常会写一些 小程序 给自己用
程序 出现 bug 的时候 自己也会调试,找到bug也很快.

            今天我自己写的小程序 在自己电脑上运行没问题 ,发给朋友的时候 打开直接就提示 停止运行
            虽然后来找到了bug(我在朋友电脑上装了 vs2017 在他的机器上调试) 但是这种直接没有 任何提示的错误 ,我应该快速 定位bug 在哪 ?不可能次次都在别人机器上装 IDE 吧.

            远程调试也费劲 我们都是内网.

3个回答

(1)编写单元测试,对你代码的每个函数和模块,在每次生成的时候都要测试,如同在造一栋房子,需要先测试每一块砖是不是合格,然后才能组装。
(2)运用断言和异常,异常信息要写明确,切忌来一个try...catch把异常吃掉,导致系统进入不可意料的状态。在某些重要的节点用断言,比如说某个参数不允许null,结果不可能在某个范围外,都要加以判断。
(3)加上日志输出,这样出现错误,可以明确看到代码运行了哪一步,可以缩小排错的范围。
(4)自动化UI测试和回归测试。如果遇到bug,要尽量找到复现错误的步骤,并且写出UI测试用例,然后修改bug后都要跑一次,避免代码退化。
(5)良好的架构设计,避免核心代码反复修改,便于错误隔离。

如果问题得到解决,请点下我回答右边的采纳,谢谢

tianjian5468
墨盒飞飞 非常感谢 我很少有写 日志 以后要重视起来了
一年多之前 回复

还有,可以在程序中建立自己的异常处理程序,异常处理中,调用MiniDumpWriteDump之类函数生成dump文件,用dump文件在本机进行分析,也能定位大致错误位置,这样操作,记得把你每次程序编译后的符号文件保存下来,调试dump文件的时候,符号文件非常有用

tianjian5468
墨盒飞飞 感谢
一年多之前 回复

建议使用

 try
            {
                //你运行的程序
            }
            catch (Exception yc)//捕获异常
            {
                string err = yc.ToString();
                string path = AppDomain.CurrentDomain.BaseDirectory;//获取软件目录
            string filename = "";
            string Dtm = DateTime.Now.ToString("yyMMddhhmmss", DateTimeFormatInfo.InvariantInfo);
            filename = path + "error\\" + Dtm + ".txt";
            StreamWriter strmsave = new StreamWriter(filename, false, Encoding.Default);
            strmsave.Write(err);
            strmsave.Close();
                return false;
            }



然后就能去软件目录下查看errorlog了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问