【发布时间】:2021-03-30 13:43:02
【问题描述】:
我有一个正在处理的 C# 项目,我正在尝试调试导致未处理异常的问题。问题是每当我放置一个断点并且如果我按下“Step Into”它就会被击中,它只是恢复执行而不是单步执行下一条指令。有谁知道如何逐个执行 C# 指令而不是恢复执行?
我在 Windows 10 上使用 Visual Studio 2019 进行调试。该项目是一个包含多个项目的解决方案,其中主项目是用 C# 编写的,其他项目是用 C++ 和 C 编写的。我能够为 C# 项目成功加载符号。
编辑:
我正在处理的项目是一个名为 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