-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNIDebuggingTools.m
61 lines (45 loc) · 1.63 KB
/
NIDebuggingTools.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//
// Copyright 2011 Jeff Verkoeyen
// Copyright 2009-2011 Facebook
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#import "NIDebuggingTools.h"
NSInteger NIMaxLogLevel = NILOGLEVEL_WARNING;
BOOL NIDebugAssertionsShouldBreak = YES;
#ifdef DEBUG
#if TARGET_IPHONE_SIMULATOR
#import <unistd.h>
#import <sys/sysctl.h>
// From: http://developer.apple.com/mac/library/qa/qa2004/qa1361.html
int NIIsInDebugger(void) {
int mib[4];
struct kinfo_proc info;
size_t size;
// Initialize the flags so that, if sysctl fails for some bizarre
// reason, we get a predictable result.
info.kp_proc.p_flag = 0;
// Initialize mib, which tells sysctl the info we want, in this case
// we're looking for information about a specific process ID.
mib[0] = CTL_KERN;
mib[1] = KERN_PROC;
mib[2] = KERN_PROC_PID;
mib[3] = getpid();
// Call sysctl.
size = sizeof(info);
sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0);
// We're being debugged if the P_TRACED flag is set.
return (info.kp_proc.p_flag & P_TRACED) != 0;
}
#endif // #ifdef TARGET_IPHONE_SIMULATOR
#endif // #ifdef DEBUG