如何在Xamarin Studio的调试器中输入命令

本文关键字:调试器 输入 命令 Studio Xamarin | 更新日期: 2023-09-27 18:26:36

我想在调试器中输入以下命令

po [[UIWindow keyWindow] _autolayoutTrace] 

在Xamarin工作室我该怎么做?

编辑:

我看到了这个Objective-C代码

NSLog(@"%@", [[UIWindow keyWindow] _autolayoutTrace]);

在程序更改中,方向更改时的自动布局以及相应的接口定义。

// for debugging auto layout.
@interface UIWindow (AutoLayoutDebug)
+(UIWindow *)keyWindow;
-(NSString *)_autolayoutTrace;
@end

我想知道如何在Xamarin iOS中做到这一点?

如何在Xamarin Studio的调试器中输入命令

如果您使用统一的API,miguel.de.icaza发布的解决方案将不再有效,因为您获得了

`ObjCRuntime.Messageing由于其保护级别而无法访问

必须使用p/Invoke:

using System;
using System.Runtime.InteropServices;
using Foundation;
using UIKit;
using ObjCRuntime;
public static class UIViewAutolayoutTraceExtensions
{
    [DllImport(Constants.ObjectiveCLibrary, EntryPoint="objc_msgSend")]
    private static extern IntPtr IntPtr_objc_msgSend (IntPtr receiver, IntPtr selector);
    public static NSString AutoLayoutTrace(){
        return (NSString)Runtime.GetNSObject(IntPtr_objc_msgSend(UIApplication.SharedApplication.KeyWindow.Handle, new Selector ("_autolayoutTrace").Handle));
    }
    public static NSString RecursiveDescription(){
        return (NSString)Runtime.GetNSObject(IntPtr_objc_msgSend(UIApplication.SharedApplication.KeyWindow.Handle, new Selector ("recursiveDescription").Handle));
    }
}

然后你可以这样使用它:

Console.WriteLine(UIViewAutolayoutTraceExtensions.RecursiveDescription ());

不过有一点需要注意:只有在加载完所有内容之后才能调用此代码。否则KeyWindow将为空。因此,不可能设置断点然后调用此代码。只有当您提供了一个按钮或类似的东西来触发操作时,才能调用此代码。

using MonoTouch.ObjCRuntime;
var str = new NSString (Messaging.IntPtr_objc_msgSend (UIApplication.SharedApplication.KeyWindow.Handle, new Selector ("_autolayoutTrace").Handle));

"str"将包含可以与Console.WriteLine 一起使用的字符串