加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Exception.StackTrace如何知道源代码中的行?

发布时间:2020-12-15 23:32:02 所属栏目:百科 来源:网络整理
导读:这让我很困惑. 我的理解是,当我编译应用程序时,它变成了我的操作系统读取的优化代码.我的源代码中的内容(如变量名,行号等)不再具有意义. 那么我怎样才能构建和运行代码 try{ // ... }catch ( Exception E ){ Console.WriteLine("Exception occured: {0}",E.S
这让我很困惑.

我的理解是,当我编译应用程序时,它变成了我的操作系统读取的优化代码.我的源代码中的内容(如变量名,行号等)不再具有意义.

那么我怎样才能构建和运行代码

try
{
    // ... 
}
catch ( Exception E )
{
    Console.WriteLine("Exception occured: {0}",E.StackTrace);
}

并获取有关我的源代码的哪一部分可以解除异常的所有详细信息.

现在,我明白在.NET中我的C#代码并不是最初的低级“操作系统代码”,而是微软中介语言.我猜测MIL为了生成这个异常信息,我在源代码和编译代码之间存在某种类型的映射.这似乎是一个巨大的浪费,不是吗?因此,.NET中的“编译”并不是真正将源代码转换为机器代码;除了源代码之外,它还在创建机器代码.这意味着我的Windows机器上的所有应用程序都有与其源代码相关的元数据.

或者我完全错了这一切?

解决方法

编译程序集时,编译器还会生成.pdb文件,该文件本质上是一个用于在调试模式下运行程序集的数据库文件.它还包含优化代码和原始代码之间的映射,允许调试器知道方法调用的行号.

有关.pdb文件的详细信息:https://msdn.microsoft.com/en-us/library/yd4f8bd1(vs.71).aspx

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读