在尝试在真实设备上调试我的应用程序时,我遇到了一个问题:在触发断点后,等待大约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
答案 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有困难,那么请忽略我(我总是一个不幸的家伙......)