首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# -应用程序意外终止而不留下跟踪

C# -应用程序意外终止而不留下跟踪
EN

Stack Overflow用户
提问于 2013-09-08 02:12:58
回答 4查看 2.1K关注 0票数 2

我有一个简单的C#应用程序/游戏使用SFML.Net,目前停止运行/终止后1或2秒钟内被执行没有任何警告,异常等。考虑以下代码:

代码语言:javascript
复制
public static void Main(string[] args)
{
   AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(OnUnhandledException);

   --> The following two lines are run
   Console.WriteLine("Hello");
   Console.WriteLine("Please don't go...");

   // Run the game
   try
   {
      --> This line is reached
      Game.Run();
   }
   catch (Exception e)
   {
      --> This line is never reached
      Console.WriteLine(e.Message.ToString());
   }

   --> These lines are never reached
   Console.WriteLine("Noone ever comes here, I feel so lonely... :(");
   Console.ReadKey();
   }
}

此时,您可能预期Game.Run()方法有问题。奇怪的是,根据VS调试器,方法的第一行从未到达

代码语言:javascript
复制
public static void Run()
{
    try
    {
        --> Never reached
        LoadContent();

        // Do stuff here

        while (window.IsOpen())
        {
            // The classic game loop
        }
    }
    catch (Exception e)
    {
        --> Never reached
        Console.WriteLine(e.Message.ToString());
        Console.ReadKey();
    }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-12-15 02:41:04

几个月后,我又回到了这个问题上,意识到我的错误是多么愚蠢。显然,默认情况下未启用非托管代码调试(这是我第一次使用VS2012),此异常是从SFML的基本C++库抛出的。

对于那些不知道的人,启用非托管调试:项目>属性> Debug >选择“启用非托管代码调试”

票数 1
EN

Stack Overflow用户

发布于 2013-09-08 02:24:56

我的猜测是:

如果您指定:

  1. 你怎么知道第一行从来没有到过?断点?输出?
  2. 当您期望输入此函数时会发生什么?您的应用程序存在吗?
  3. 正在一步一步地调试吗?
票数 1
EN

Stack Overflow用户

发布于 2013-09-08 03:55:10

我猜异常是由另一个线程抛出的。无法捕获主线程中的另一个线程引发的异常。所以你在catch中的断点永远不会被击中。顺便说一句,您是否尝试过在UnhandledExceptionEventHandler方法OnUnhandledException中有一个断点?这就是所有未处理的异常都会发生的地方!希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18679743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档