如何在VB.net中运行应用程序时打印行号

2023-11-30

我想在 VB.net 应用程序中打印出带有行号的调试消息。 我就是这样做的,

Dim st As StackTrace
Dim sf As StackFramee
st = New StackTrace(New StackFrame(True))
sf = st.GetFrame(0)
Console.WriteLine.("Line " & sf.GetFileLineNumber())

我想将代码片段放入一个类中,每次调用 logMsg 方法以在源代码中使用行号记录我的消息时。 但我发现如果我将上面的代码片段放入一个类中,行号总是相同的,这就是我新添加的“st”行。

功能与 _ 完全相同LINEC++ 中的宏。其实我是C++程序员。

无论如何要解决这个问题吗?谢谢。


您所显示的代码完全按照预期工作。它正在打印捕获堆栈帧的行号。因为您已在不同的类中定义了它,所以它会打印包含该类的文件的行号。

The GetFrame这里方法很重要。堆栈帧从 0 开始编号,即last堆栈帧被推送。因此,通过引用第 0 帧,您可以指示运行时打印该帧的行号last被推送的堆栈帧。当一个方法调用另一个方法时,就会创建一个新的堆栈帧。

相反,您需要在几个重要方面改变您的方法。首先,您需要获得first被推入堆栈的帧。其次,您可能想要接受一个包含有关您正在响应的异常的信息的参数。尝试重写您的调试方法,使其看起来像这样:

Public Sub PrintCurrentLine(ByVal ex As Exception)
    Dim st As StackTrace = New StackTrace(ex)
    Dim sf As StackFrame = st.GetFrame(st.FrameCount - 1)
    Console.WriteLine("Line " & sf.GetFileLineNumber())
End Sub

另请记住,如果您在启用优化的情况下运行代码,则行号等内容可能会发生变化。您始终需要在代码中包含 PDB 文件,其中包含在此类情况下使用的调试信息。它将优化后的代码映射回您的原始源代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在VB.net中运行应用程序时打印行号 的相关文章

随机推荐

  • 从存储过程填充 DataGridView

    我使用 SQL Server 2008 创建了一个名为 MyStoreProc 的存储过程 它在管理工具中运行良好 在 VB Net 2008 中 我创建了一个新的数据集和一个新的 TableAdaptor 在此表适配器中 我创建了一个名为
  • 如何从树状数组创建 ul - li 菜单?

    我有一个数组title and children index title始终不为空 children是一个数组 空或非空 Any children have title and children等等 myArray 0 gt title g
  • JTable右键复制/粘贴菜单一键复制单元格数据

    我创建了我的JPopupMenu 它出现在我的JTable当我右键单击一个单元格时 但是 我无法复制单元格中的数据 除非我首先双击然后突出显示数据 然后右键单击当前单元格以外的任何位置以显示弹出菜单和复制选项 我想复制单元格中的数据 而不必
  • Perl - 子例程“Hash::Merge::merge”的深度递归

    下列的this问题 我在那里使用了答案 也发布在这里 现在我失败了 我知道失败可能来自于 return bless self gt merge left right class left 但我不明白可能是什么问题 My code usr b
  • 使用 Windows 服务和 SQL Server 在 OneWay WCF 消息中排队

    我需要为 WCF 服务请求实现一个排队机制 该服务将由客户端以单向方式调用 这些请求消息应存储在 SQL Server 数据库中 并且 Windows 服务对消息进行排队 处理请求的时间是可配置的 如果处理消息时发生错误 则需要重试最多10
  • MySQL 5.7 错误(1093:您无法在 FROM 子句中指定目标表 ___ 进行更新) - 通常的解决方案不起作用

    我有一个表 员工 我试图将一些属性 例如薪水 设置为与表中其他值相同的值 我对这个错误的理解是 可以通过以下解决方法来避免它 使用临时表 UPDATE employees SET salary SELECT salary FROM SELE
  • 当使用非虚拟析构函数“删除”基类时,Clang 和 GCC 会做什么?

    已经有一个问题询问 现实世界 的行为delete指向缺少虚拟析构函数的基类的指针 但问题仅限于非常有限的情况 派生类没有具有非平凡析构函数的成员 并且接受的答案只是说没有办法知道不检查每个编译器的行为 但这实际上并不是很有帮助 知道每个编译
  • authorize.net json返回额外字符

    我有这个代码 ch curl init curl setopt ch CURLOPT URL url curl setopt ch CURLOPT RETURNTRANSFER 1 curl setopt ch CURLOPT HTTPHE
  • Laravel 5 如何在保存时验证每个活动下的唯一客户名称

    我有三个模型 活动模型 客户模型和客户项目模型 如何在商店功能中进行验证检查 使每个活动中的客户名称应该是唯一的 以下是每个迁移文件 活动模型 public function up Schema create activities func
  • Angular Material 6 中用于自动完成的无限滚动

    我正在尝试在 Angular Material 6 中实现自动完成的无限滚动 我的场景很简单 我有一个启用了自动完成功能的输入字段 当用户键入时 我将使用输入字段中的文本进行 HTTP 调用 以将结果显示为建议 但我只想显示 25 条建议
  • 禁用优化后,演示代码未能显示出 4 倍快的 SIMD 速度

    我试图了解使用 SIMD 矢量化的好处 并编写了一个简单的演示代码 以了解利用矢量化 SIMD 的算法相对于其他算法的速度增益 这是2种算法 Alg A 无矢量支持 include
  • 让 Java 通过 HTTPS 接受所有证书

    我正在尝试让 Java 接受所有通过 HTTPS 的证书 这是出于测试目的 在我收到证书未找到错误之前 但是 在我的代码之前添加以下代码后 我得到了HTTPS hostname wrong should be
  • X.509 数字签名/加密工作流程/库建议?

    我的具体用例是 我必须访问存储在客户端上的数字证书 并使用它们在客户端和服务器端执行签名 验证 加密和解密的任务 对于后一部分 解决方案有很多很多 症结在于访问客户端上存储的证书的能力 请注意 我说的是 存储在客户端上的证书 这是故意含糊其
  • 如何在每个组内创建滞后变量?

    我有一个数据表 require data table set seed 1 data lt data table time c 1 3 1 4 groups c rep c b a c 3 4 value rnorm 7 data grou
  • 如何显示 html 元素,例如通过 Html.ValidationSummary() 渲染的错误中的链接

    我的一条错误消息呈现了一个链接 然而 Html ValidationSummary 对它进行编码 因此显示如下 您指定的手机或电子邮件帐户已存在 如果您忘记了密码 请重置它 相反 它应该呈现为 您指定的手机或电子邮件帐户已存在 如果您忘记了
  • 具有多个提交按钮或多个表单的表单[重复]

    这个问题在这里已经有答案了 我有一个文章列表 我为所有文章添加了提交按钮 事实是 当我在控制器中时 我无法隐藏良好的输入 因为它将采用最后的输入
  • 为什么SqlDataReader类不能被继承?

    SqlDataReader类没有标记为 seal 那么是什么使它不可继承呢 The SqlDataReader类型的构造函数被标记为internal这意味着它只能通过类型中的实例化System Data dll集会 这也禁止您继承它 因为基
  • 如何动态更改 GLTF 模型的纹理?

    在我的场景中 我加载了一个 gltf 模型 它渲染得很好 它有一个 png 纹理 渲染在 3D 模型的表面上 是否可以通过编程方式交换纹理 我正在使用 aframe a asset item 和 a entity 来加载 gltf 资产 O
  • iPhone 崩溃并显示“无回溯”

    我的 iPhone 应用程序最近被 App Store 拒绝 因为它在启动时崩溃 但是 我无法重现此崩溃 该应用程序在模拟器和具有 Apple 测试过的相同硬件和软件的设备 运行 iOS 4 的 iPhone 3 1 上都能完美运行 他们发
  • 如何在VB.net中运行应用程序时打印行号

    我想在 VB net 应用程序中打印出带有行号的调试消息 我就是这样做的 Dim st As StackTrace Dim sf As StackFramee st New StackTrace New StackFrame True sf