[英]Debug a running android app using Xamarin for Visual Studio
When the app starts I have it loading a list from local storage if offline, or if there is a network connection it will load this list from a web service (and then write to local storage. 当应用程序启动时,我让它从本地存储加载一个列表,如果离线,或者如果有网络连接,它将从Web服务加载此列表(然后写入本地存储。
My issue is that for me to debug this, i need to close the app completely and then restart it (therefore ending the visual studio debug session) 我的问题是,我要调试这个,我需要完全关闭应用程序,然后重新启动它(因此结束visual studio调试会话)
The app will boot but when I call a particular method once the app has started again it crashes. 该应用程序将启动,但是当我再次启动应用程序时调用特定方法时,它会崩溃。 I cant figure out where its falling over.
我无法弄清楚它在哪里摔倒。 and as the debug session is no longer attached that is no help either.
并且由于不再附加调试会话,也没有任何帮助。
Weird thing is. 奇怪的是。 I've even tried wrapping the method call and the contents of the method in a try catch block (to try and figure out whats wrong) and its still falling over.
我甚至尝试在try catch块中包装方法调用和方法的内容(试图弄清楚什么是错的)并且它仍然会崩溃。
Here is the fragment. 这是片段。
class MyCouncilsFragment:Fragment
{
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
//my councils
base.OnCreateView(inflater, container, savedInstanceState);
var view = this.View ?? inflater.Inflate(Resource.Layout.mycouncils, container, false);
string councils = GoIO.LoadText(CC.FILE_MYCOUNCILS) ?? "";
List<Council> mycouncils = Shared.Serialization.Deserialize<List<Shared.Council>>(councils) ?? new List<Council>();
MyGlobals.myCouncilsList = mycouncils;
Spinner spncouncils = view.FindViewById<Spinner>(Resource.Id.spnCouncils);
if(mycouncils.Count > 0)
{
spncouncils.Enabled = true;
CouncilSpinnerAdapter adapter = new CouncilSpinnerAdapter(Main_Act.context, Resource.Layout.spn_row_text, MyGlobals.myCouncilsList.ToArray());
spncouncils.Adapter = adapter;
Button btnSelect = view.FindViewById<Button>(Resource.Id.btnSelect);
btnSelect.Enabled = true;
btnSelect.Click += delegate
{
Council sessionCouncil = MyGlobals.myCouncilsList[spncouncils.SelectedItemPosition];
//sessionCouncil is not the problem, i've tested that
try
{
Main_Act.loadLists();
//the issue is when this method is called. (however the call works fine when calling it from a different fragment thats basically in the same state)
}
catch
{
}
//List<Designer> x = Shared.WebServerHelper.WebCall<Designer>("https://" + MyGlobals.sessionCouncil.service_url + "/design/");
//MyGlobals.sessionColours = x[0];
//MyGlobals.hintText = MyGlobals.getSubtleColour(MyGlobals.getColor(MyGlobals.sessionColours.controlcolour), 20);
//var intent = new Intent(this.Activity, typeof(MyDetails_Act));
//StartActivity(intent);
};
}
else
{
//List<Council> emptylist = new List<Council>();
//Council empty = new Council();
//empty.council_name = "no councils added";
//emptylist.Add(empty);
//spncouncils.Enabled = false;
//Button viewall = view.FindViewById<Button>(Resource.Id.btnSelect);
//viewall.Visibility = ViewStates.Gone;
//TextView nb = view.FindViewById<TextView>(Resource.Id.nb);
//nb.Visibility = ViewStates.Visible;
}
return view;
}
And this is the method that is being called 这就是被调用的方法
public static void loadLists()
{
try
{
// // _| _|_| _|_| _|_|_|
// // _| _| _| _| _| _| _|
// // _| _| _| _|_|_|_| _| _|
// // _| _| _| _| _| _| _|
// // _|_|_|_| _|_| _| _| _|_|_|
if (MyGlobals.sessionCouncil != null)
{
var connectivityManager = (ConnectivityManager)context.GetSystemService(ConnectivityService);
var activeConnection = connectivityManager.ActiveNetworkInfo;
if (activeConnection != null && activeConnection.IsConnected)
{
loadConsentsFromWeb();
Console.WriteLine("getting inspectiontypes online");
loadInspectionTypesOnline();
}
else
{
try
{
loadConsentsFromFile();
loadInspectionTypesOffline();
}
catch
{
Toast.MakeText(context, "Unable to load consents from file", ToastLength.Long).Show();
}
}
try
{
loadBookings();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
else
{
//inspection types failed to load from file or from web. propmt user to reaload app? or something?
Toast.MakeText(context, "Definition Elements failed to load, please restart the app", ToastLength.Short).Show();
System.Environment.Exit(0);
}
}
catch
{
}
}
Notice, I've tried putting the whole method in a try block and the app is still falling over 请注意,我已经尝试将整个方法放在try块中,应用程序仍在不断崩溃
Try running adb logcat
from the command prompt and search for a fatal exception when the app crashes. 尝试从命令提示符运行
adb logcat
,并在应用程序崩溃时搜索致命异常。 Haven't got enough points for a comment so i'm using the answer instead. 没有足够的评论点,所以我正在使用答案。 Sorry =)
对不起=)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.