none
1C#中如何记录异常的完整信息 RRS feed

  • 问题

  • C#中如何记录异常的完整信息:比如发生异常的文件,函数甚至详细到异常发生的具体行数?
    • 已移动 ThankfulHeart 2012年5月23日 6:39 IIS程序发布问题 (发件人:.NET Framework 一般性问题讨论区)
    2012年5月23日 5:38

答案

全部回复

  • C#中如何记录异常的完整信息:比如发生异常的文件,函数甚至详细到异常发生的具体行数?

    C#有try……catch……用来包含一个可能引发错误的代码段,当错误引发时候将抛出异常,内部会根据已经存放代码的堆栈层层查找错误信息和原因的。例如这样一个代码:

    class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    int i = 0;
                    int j = 18 / i;
                }
                catch (Exception exp)
                {
                    Console.WriteLine(exp.ToString());
                }
            }
        }

    那么错误信息就会这样显示:

    38行。

    如果你想把错误输出到其它地方,参考使用FileStream类(在catch部分),或者是Log4J等现成日志记录工具


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年5月23日 5:45
  • 但是我这里ex.ToString()只记录到了文件和函数,具体的哪一行没有记录到?

    2012-05-23 13:42:02: System.NullReferenceException: 未将对象引用设置到对象的实例。
       在 MpNet.Utils.OfficeHelper.FillWordFromTemplate(String tempFile, String newFile, String[] bmFlag, String[] bmValue)


    2012年5月23日 6:10
  • 我不清楚你是什么异常。但是肯定会有行数的。

    你仔细看我的代码,就会有行数(line38……)。

    另外,你“FillWordFromTemplate”这个函数里边有问题,请自己寻找调用这个函数的各个参数以及数值,注意,VS不可能每一个细节都会提示,需要经验的。


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年5月23日 6:15
  • 现在的问题是在我开发的机子上调试和运行都是通过的,移植到服务器上以后,日志里面发现了这个,这个就根本没法查的了啊
    2012年5月23日 6:19
  • 现在的问题是在我开发的机子上调试和运行都是通过的,移植到服务器上以后,日志里面发现了这个,这个就根本没法查的了啊
    看样子你调用了第三方的控件,请仔细核查是否与项目同时发布了;另外还有你服务器配置问题……方便你回答,我现在把你问题移动到IIS这里,请问,你是IIS吗?

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年5月23日 6:21
  • 是的,好的,谢谢你
    2012年5月23日 6:38
  • 是的,好的,谢谢你
    不用谢!我怀疑是不是你用了第三方的类什么的……,VS往往力不从心了……?

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年5月23日 6:39
  • 你使用了Office组件,那是COM的吧?不太容易调试咯……同时发布到IIS上了?!

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年5月23日 6:43
  • 我高度怀疑这两个可能有一个为空:

    Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application(); Microsoft.Office.Interop.Word.Document doc = new Microsoft.Office.Interop.Word.Document();

    发布到IIS上面了,但是在我的WIN7开发机子上正常,但是部署到2008 IIS上面就报错了


    2012年5月23日 6:44
  • 那看来这个问题还比较复杂……你本地可以,但是到IIS上不行?而且是office编程相关?

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年5月23日 6:45
  • 我做了如下调整:

    Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application();
                    if (wordApp == null) LogManager.WriteLog(LogFile.Error, "new Microsoft.Office.Interop.Word.Application with error");
                    Microsoft.Office.Interop.Word.Document doc = new Microsoft.Office.Interop.Word.Document();
                    if (doc == null) LogManager.WriteLog(LogFile.Error, "new Microsoft.Office.Interop.Word.Document with error");

    但是记录到的还是同样的结果?

    2012-05-23 14:51:48: System.NullReferenceException: 未将对象引用设置到对象的实例。
       在 MpNet.Utils.OfficeHelper.FillWordFromTemplate(String tempFile, String newFile, String[] bmFlag, String[] bmValue)

    说明我的判断可能有误?
    2012年5月23日 6:53
  • 我现在有个最笨的办法,在每个语句后面输出调试信息,做流水编号,看哪个编号断掉了,问题大概就在那个语句上面:结果显示i这个:

                    //打开文件
                    doc = wordApp.Documents.Open(ref Obj_FileName, ref missing, ref ReadOnly, ref missing,
                        ref missing, ref missing, ref missing, ref missing,
                        ref missing, ref missing, ref missing, ref Visible,
                        ref missing, ref missing, ref missing, ref missing);
                    doc.Activate();

    异常了。。。。

    空指针异常的话,说明还是wordApp为空了,

    2012年5月23日 7:06
  • 搞定了,是com的权限问题导致创建对象失败
    2012年5月23日 7:45
  • 搞定了,是com的权限问题导致创建对象失败
    OK,可以给出更详细的答案吗?并且标记成答案更好了……如何设置权限的?

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年5月23日 7:53
  • DCOM设置权限自定义,添加登陆帐户和ASP.NET账户许可,然后选择交互式,测试OK!!! 原因未知,交给MVP们来解答吧!


    2012年5月23日 12:02