所以,这就是我遇到的问题。
void * something = ???;
void (*fun)(void*) = ???;
try
{
fun(something);
}
catch (...)
{
assert(false);
}
我的任务是确定断言被解雇的原因。不幸的是我没有改变上面的代码。此外,这是在一个多线程环境中,它是在程序关闭期间。执行try / catch的部分在现实世界代码中非常有目的地解锁。当我尝试逐步完成程序时,它突然消失在我身上......我甚至无法进入正确的fun()调用,更不用说进入它了。
我唯一的办法似乎是在捕获中放置一个断点(...)并检查那里有什么。不幸的是,这并没有告诉我什么,因为我不知道什么是真正的乐趣,也不知道是什么。
我唯一希望在这一点上,我可以以某种方式谈论Visual Studio调试器,告诉我...
是什么,如果我能找到它被抛出的地方,我会高兴极了。它至少不在汽车列表中......可能在其他地方吗?我有什么方法可以在这里取得进展,还是我搞砸了?我觉得搞砸了......
====
更新:当没有及时关闭时,有一个外部程序杀了我的。这就是踩踏使它消失的原因。与线程没有任何关系。
一旦我意识到我能够按照建议开启异常。不幸的是,没有地方可以抛出一个......这是违反访问权限的行为。存储的函数以某种方式受到攻击。
答案 0 :(得分:3)
尝试使用Visual Studio功能,在抛出异常时中断执行。转到Visual Studio主菜单Debug - >例外并勾选所有例外。
这样,当您的异常被抛出时,visual studio将停止,您将知道它是什么。
答案 1 :(得分:1)
您是否可以转到菜单:调试|例外并标记您怀疑引发的异常? 如果您可以步进/附加到应该可能的正在运行的程序。这将导致调试器在抛出特定异常时中断。
我通常在Debug | Exceptions对话框中标记整个子树' Win32 Exceptions '。我假设您的程序没有抛出并默默地忽略其他(Win32)异常(在这种情况下,您会有很多'错误'警报)。
我希望有所帮助。