【发布时间】:2012-08-30 06:10:05
【问题描述】:
我编写了一个控制台应用程序,它使用Socket 的*Async 方法集,但它时常崩溃。它没有向我显示它在哪里引发了同步代码等异常,控制台只是关闭了,我不知道我做错了什么。
在不知道将try/catch 块放在哪里的情况下,有没有办法在像这样的异步操作中检测异常?
我只需要知道代码的哪一部分导致我的应用程序崩溃。
编辑:
未处理异常的常见情况是,当您使用 Visual Studio 调试代码时,它会暂停执行并向您显示导致异常的代码行(或至少是异常消息)。但在某些情况下(例如与 IOCP 等低级 API 交互),您的程序只会崩溃,并且调试结束时没有任何有关其原因的信息。
我需要的是一种查看特定异常的方法:
“发生了什么或在哪里(以哪种方法)发生了,所以我的程序崩溃了?”
所以我不会问“我做错了什么?”,我会问“我怎么才能知道我做错了什么?”
- 我可以在抛出异常的地方中断执行吗?
- 我可以查看崩溃后的调用堆栈以识别导致它的方法吗?
- 您能否提供任何建议来避免此类情况?
【问题讨论】:
-
您能否发布一些代码,以便我们了解您的结构?
-
@wdavo:这就像 500 行代码,调用 Socket 的 AcceptAsync、ReceiveAsync、SendAsync,我不知道它会在哪里繁荣。此外,我想知道异步应用程序的通用解决方案。它以前在早期项目中发生在我身上,我知道它会在不同的上下文中再次发生,所以我需要知道“如何调试异步代码”(如果可能的话),而不是修复代码的损坏部分在我当前的项目中。
-
在我们看到你的代码之前,很难知道你做错了什么......
-
但是@Len,我要问的不是“我做错了什么”。请参阅我对此的编辑。
标签: c# visual-studio-2010 debugging asynchronous iocp