所以,这就是我遇到的问题。
void * something = ???;
void (*fun)(void*) = ???;
try
{
fun(something);
}
catch (...)
{
assert(false);
}
我的任务是确定断言被触发的原因。不幸的是我没有改变上面的代码。此外,这是在多线程环境中,并且是在程序关闭期间。执行 try/catch 的部分在现实世界的代码中是有目的地解锁的。当我尝试逐步执行该程序时,它突然消失在我面前...我什至无法执行正确的 fun() 调用,更不用说进入它了。
我唯一的办法似乎是在 catch(...) 中放置一个断点并检查其中的任何内容。不幸的是,这并没有告诉我什么,因为我不知道真正的乐趣是什么,也不知道什么是什么。
此时我唯一的希望是,我可以通过某种方式让 Visual Studio 调试器告诉我 ...
是什么,如果我能找出它被抛出的位置,我会非常高兴。它至少不在自动列表中……可能在其他地方?我有什么办法可以在这里取得进步还是我搞砸了?我觉得被搞砸了...
====
更新:有一个外部程序在没有及时关闭时杀死了我的。这就是为什么步进使它消失的原因。与线程无关。
一旦我意识到我能够按照建议打开异常。不幸的是,没有地方可以抛出一个……这是一个访问冲突。正在存储的函数以某种方式受到冲击。
最佳答案
尝试使用在抛出异常时中断执行的 Visual Studio 功能。转到 Visual Studio 主菜单调试 -> 异常并勾选所有异常。
这样,当您的异常被抛出时,visual studio 将停止,您将知道它是什么。
关于c++ - 在调试 session 期间获取有关匿名异常的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14349266/