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

时间:2014-10-15 06:27:42

标签: c# ios xamarin.ios autolayout xamarin-studio

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

po [[UIWindow keyWindow] _autolayoutTrace] 

我如何在Xamarin Studio中做到这一点?

修改

我看到了这个Objective-C代码

NSLog(@"%@", [[UIWindow keyWindow] _autolayoutTrace]);
<{3}}中的

以及该接口的定义。

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

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

2 个答案:

答案 0 :(得分:5)

如果您使用统一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));
    }
}

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

Console.WriteLine(UIViewAutolayoutTraceExtensions.RecursiveDescription ());

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

答案 1 :(得分:2)

using MonoTouch.ObjCRuntime;

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

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