【问题标题】:How to debug code that interacts with low level APIs (like I/O completion ports)?如何调试与低级 API(如 I/O 完成端口)交互的代码?
【发布时间】: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


【解决方案1】:

点击Debug-menu -> Exceptions。确保Common Language Runtime Exceptions 被抛出。有时 IDE 会取消选中此选项。我不知道为什么,但它很烦人。

【讨论】:

  • User-Handled 检查 CLR 异常下的所有项目。我应该检查Thrown吗?
  • @ŞafakGür 是的,应该检查投掷。
  • 谢谢您,我会尝试一下并尽快回复您。
【解决方案2】:

启用System.Net logging 看看下面发生了什么

【讨论】:

    猜你喜欢
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 2011-03-03
    • 2012-06-04
    • 2012-06-19
    • 1970-01-01
    相关资源
    最近更新 更多