【问题标题】:How to single step instructions when debugging C#?调试 C# 时如何单步说明?
【发布时间】:2021-03-30 13:43:02
【问题描述】:

我有一个正在处理的 C# 项目,我正在尝试调试导致未处理异常的问题。问题是每当我放置一个断点并且如果我按下“Step Into”它就会被击中,它只是恢复执行而不是单步执行下一条指令。有谁知道如何逐个执行 C# 指令而不是恢复执行?

我在 Windows 10 上使用 Visual Studio 2019 进行调试。该项目是一个包含多个项目的解决方案,其中主项目是用 C# 编写的,其他项目是用 C++ 和 C 编写的。我能够为 C# 项目成功加载符号。

这里是github repository

编辑:

我正在处理的项目是一个名为 Mesen 的 NES 模拟器,我尝试调试的问题是在线播放期间未处理的异常。该异常显然是随机触发的,我尝试了多种操作来尝试触发它,但它仍然只是自行发生。

private void StartEmuThread()
{
    if(_emuThread == null) {
        _emuThread = new Thread(() => {
            try {
                InteropEmu.Run();
                _emuThread = null;
            } catch(Exception ex) {
                MesenMsgBox.Show("UnexpectedError", MessageBoxButtons.OK, MessageBoxIcon.Error, ex.ToString());
                _emuThread = null;
            }
        });
        _emuThread.Start();
    }
    UpdateMenus();
}

我试图在 InteropEmu.Run() 上设置一个断点并从那里单步执行,但每次我进入它时都会恢复程序。

这是我在 InteropEmu.Run() 上打断点时来自 Visual Studio 的屏幕截图

在我按下调试工具栏顶部的步骤后,它会在此处恢复。

这是我正在尝试解决的异常

谢谢

【问题讨论】:

  • 您是否有机会尝试“进入”不属于您项目源代码的方法?
  • 不,或者至少我不这么认为,但 C++ 项目确实没有任何可用的符号。事实上,只有主项目是用符号编译的,其他的甚至都没有出现在模块列表中。
  • 您是否尝试过显示“异常”窗口(“调试”菜单)并在 CLR 异常旁边打勾,以便 VS 在抛出异常时立即中断/在抛出的行上中断?
  • 是的,调试时我已经转到异常设置并检查了 System.Runtime.InteropServices.SEHException 这是我经常得到的,但它给我的只是导致例外。我已将其注释掉,并将进行更多测试,但我仍然无法单步执行代码。
  • 发布屏幕录像可能会有所帮助。您是否启用了“仅我的代码”

标签: c# visual-studio debugging


【解决方案1】:

我尝试了一些不同的构建选项,结果发现,对于 Release 构建禁用了单步执行,但对于 Debug 构建则没有。我尝试了一个调试版本,这次成功了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-01
    • 2010-10-20
    • 2016-06-19
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多