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

tes*_*ing 1 c# xamarin.ios ios autolayout xamarin-studio

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

po [[UIWindow keyWindow] _autolayoutTrace] 
Run Code Online (Sandbox Code Playgroud)

我怎么在Xamarin工作室那样做?

编辑:

我看到了这个Objective-C代码

NSLog(@"%@", [[UIWindow keyWindow] _autolayoutTrace]);
Run Code Online (Sandbox Code Playgroud)

编程方式更改自定义更改的自动布局以及该接口定义.

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

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

tes*_*ing 6

如果您使用统一API,则miguel.de.icaza发布的解决方案将不再起作用,因为您可以获得

由于其保护级别,"ObjCRuntime.Messaging"无法访问

一个人必须使用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));
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样使用它:

Console.WriteLine(UIViewAutolayoutTraceExtensions.RecursiveDescription ());
Run Code Online (Sandbox Code Playgroud)

但有一点需要注意:您只能在加载完所有内容后调用此代码.否则KeyWindow将为null.因此,不可能设置断点然后调用此代码.如果您提供触发操作的按钮或类似按钮,则只能调用此代码.