簡體   English   中英

Log Objective-c消息在設備上發送

[英]Log Objective-c message sends on a device

在模擬器中運行iOS應用時,存在一個環境變量NSObjCMessageLoggingEnabled ,該變量使所有objc_msgSend調用都注銷到文件中。 詳細說明 )。

我正在嘗試追蹤在我的應用程序中發送的所有消息,但無法在模擬器中運行它。 它必須在物理設備上,因為我正在通過雷電連接器與硬件進行交互。 出於同樣的原因,我無法將調試器附加到該進程。

將日志寫入磁盤類似於使用NSObjCMessageLoggingEnabled創建的NSObjCMessageLoggingEnabled ,但將其本地寫入我應用程序的Documents目錄或類似目錄中會很有幫助。

這可能嗎?

NSObjCMessageLoggingEnabled所做的所有操作是導致CoreFoundation在啟動和關閉時自動調用instrumentObjcMessageSends

問題在於,Apple故意在本機iOS SDK中隱藏了該功能,因此您不能只是調用它。

但是它在運行時仍存在於dylib中,因此您可以始終這樣做:

typedef void functype(BOOL);
void *libobjc = dlopen("/usr/lib/libobjc.dylib", RTLD_LAZY);
functype *instrumentObjcMessageSends = dlsym(libobjc, "instrumentObjcMessageSends");
if (!instrumentObjcMessageSends) {
    NSLog(@"Couldn't get instrumentObjcMessageSends");
    exit(1);
}
instrumentObjcMessageSends(YES);
NSLog(@"Did it");

我不知道日志要寫入哪里。 我假設您將要調用logObjcMessageSends來注冊自己的ObjCLogProc ,如鏈接到的文章中所述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM