閑話少說,直接上步驟
步驟一、打開main.m文件,導(dǎo)入頭文件#import <dlfcn.h>
如圖所示:
步驟二侥涵、定義禁用調(diào)試代碼
typedef int (*ptrace_ptr_t)(int _request, pid_t _pid, caddr_t _addr, int _data);
#if !defined(PT_DENY_ATTACH)
#define PT_DENY_ATTACH 31
#endif
void disable_gdb()
{
void *handle = dlopen(0, RTLD_GLOBAL | RTLD_NOW);
ptrace_ptr_t ptrace_ptr = dlsym(handle, "ptrace");
ptrace_ptr(PT_DENY_ATTACH, 0, 0, 0);
dlclose(handle);
}
如圖所示:
步驟三、調(diào)用禁止調(diào)試代碼
int main(int argc, char * argv[])
{
disable_gdb();
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([T_TAppDelegate class]));
}
}
如圖所示:
此時(shí)您用模擬器或真機(jī)調(diào)試您的APP的時(shí)候會(huì)發(fā)現(xiàn)調(diào)試不了宋雏,現(xiàn)象就是----xcode編譯運(yùn)行完畢代碼的時(shí)候芜飘,突然就和模擬器或真機(jī)斷開連接了。此時(shí)說明已經(jīng)可以禁止其他人動(dòng)態(tài)調(diào)試您的應(yīng)用了磨总。
此時(shí)可能會(huì)有人問嗦明,那我想測(cè)試的時(shí)候可以調(diào)試,打包之后禁止調(diào)試舍败,該如何做呢招狸。遇到這個(gè)疑問請(qǐng)看下面的代碼:
int main(int argc, char * argv[])
{
#ifdef RELEASE
disable_gdb(); // 只在release(archive)時(shí)調(diào)用這個(gè)代碼
#endif
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([^_^AppDelegate class]));
}
}