[英]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.