1

在尝试在真实设备上调试我的应用程序时,我遇到了一个问题:触发断点后,等待大约 6 秒(无论我是单步执行代码还是什么都不做),程序将终止。输出窗口显示:

02-22 10:31:42.599 I/mono (32532):堆栈跟踪:
02-22 10:31:42.599 I/单声道 (32532):
程序“Mono”以代码 255 (0xff) 退出。

我尝试在两个不同的设备(ASUS Padfone 和 HUAWEI C8812,均为 Android 4.0.4)上调试,结果相同。
看起来设备终止了程序,因为它没有在限定时间内响应。但它当然不会响应!我正在逐步执行我的代码!

顺便说一句,在模拟器上调试很好(但是 SLOOOOW !!而且经常崩溃)

我的 monodroid 版本是 4.4.55,我在 Windows 7(64 位)下使用带有 SP1 的 Visual Studio 2010

4

1 回答 1

0

我想我找到了问题,这里有一些代码,简单的代码,真的:

class OwnerDrawView : View
{
    PointF m_screenPosition;

    public OwnerDrawView(Context context)
      : base(context)
    {
      this.Touch += new EventHandler<TouchEventArgs>(OwnerDrawView_Touch);
      this.SetWillNotDraw(false);
    }

    protected override void OnDraw(Canvas canvas)
    {
      Core.Instance.OnDraw(canvas);
      base.OnDraw(canvas);
    }

    void OwnerDrawView_Touch(object sender, View.TouchEventArgs e)
    {
      m_screenPosition = new PointF(e.Event.GetX(), e.Event.GetY());
      switch (e.Event.Action) {
        case MotionEventActions.Down:
            Core.Instance.OnTouchDown(m_screenPosition);
            break;
        case MotionEventActions.Move:
            Core.Instance.OnTouchMove(m_screenPosition);
            break;
        case MotionEventActions.Up:
            Core.Instance.OnTouchUp(m_screenPosition);
            break;
      }
    }
}

不要介意“Core”类,它在这里并不重要(虽然听起来很^_^)
要重现这个错误,只需将断点放在这一行:

Core.Instance.OnTouchDown(m_screenPosition);

在设备上运行程序,触摸屏幕,等待几秒钟,BOOM!
但是如果断点被放置在“Core.Instance.OnTouchUp(m_screenPosition)”行上,那就太惊喜了!一切安好!!我勒个去!!

我的整个程序在一个线程上运行,所以它不是多线程相关的东西。我确实有一个计时器,但该计时器仅在“OwnerDrawView”类上调用 PostInvalidate(是的!我正在使用 Canvas 构建游戏!)

这可能是 monodroid 中的一个错误,但如果有人在重现此错误时遇到问题,请忽略我(我总是一个不幸的人......)

于 2013-02-22T08:23:25.537 回答