Mono for android - 在Device上调试问题

时间:2013-02-22 03:02:42

标签: android debugging mono xamarin.android

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

02-22 10:31:42.599 I/mono (32532): Stacktrace:
02-22 10:31:42.599 I/mono (32532):
The program 'Mono' has exited with code 255 (0xff).

我尝试在两个不同的设备(华硕Padfone和华为C8812,两者都是Android 4.0.4)上进行调试,结果相同。
看起来设备终止了程序,因为它没有在限制时间内响应。但当然它不会回应!我正在踩着我的代码!

模拟器上的BTW调试很好(但是SLOOOOW !!并且经常崩溃)

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

1 个答案:

答案 0 :(得分: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.Instance.OnTouchDown(m_screenPosition);

在设备上运行程序,触摸屏幕,等待几秒钟,BOOM!
但如果断点放在“Core.Instance.OnTouchUp(m_screenPosition)”行,那么惊喜!一切都好!!怎么了!!

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

这可能是monodroid中的一个错误,但是如果有人在那里复制这个bug有困难,那么请忽略我(我总是一个不幸的家伙......)