如何在CodeDom中获取运行时错误行号?

时间:2013-12-08 03:53:22

标签: runtime codedom line-numbers

例如,下面的代码可以编译好,但在运行时抛出异常。 我的问题是,如何获取运行时错误行号?感谢。

using System;
using System.Collections.Generic;
using System.Text;

namespace mytempNamespace {
    public class mytempClass : {

        public void show() {

            String msg=null;
            String msgNew=msg.Substring(3);
        }

    }

}

编译时,结果没问题

CodeDomProvider compiler = CSharpCodeProvider.CreateProvider("CSharp");
CompilerResults compilerResults = compiler.CompileAssemblyFromSource(parms, myClassCode);
Assembly assembly = compilerResults.CompiledAssembly;

当我调用方法" show"时,程序集会抛出异常。 如何在CodeDom中获取运行时错误行号?

1 个答案:

答案 0 :(得分:1)

使用StackTrace提取异常的文件,行和列信息。

StackTrace stackTrace = new StackTrace(exception, true);
if (stackTrace.FrameCount > 0)
{
    StackFrame frame = stackTrace.GetFrame(0);
    int lineNumber = frame.GetFileLineNumber();
    int columnNumber = frame.GetFileColumnNumber();
    string fileName = frame.GetFileName();
    string methodName = frame.GetMethod().Name;
    // do stuff
}

您需要编译代码并设置CompilerParameters以输出调试信息:

CompilerParameters parms = new CompilerParameters()
{
    GenerateInMemory = false,
    IncludeDebugInformation = true,
    OutputAssembly = myOutputAssembly,
    // other params
};
CodeDomProvider compiler = CSharpCodeProvider.CreateProvider("CSharp");
CompilerResults compilerResults = compiler.CompileAssemblyFromSource(parms, myClassCode);
Assembly assembly = compilerResults.CompiledAssembly;

希望有所帮助!