isource_lldb 0.2.9 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rubygems_plugin.rb +16 -6
  3. data/lib/setup +390 -299
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b1752aa4cf761155ddc9acca33f051c0580a35bd29234074324b5e788a5ebe88
4
- data.tar.gz: fad87428ef594972429c3adcf1b19c89bfc0b2c3297c02b6dd18b2639c42b415
3
+ metadata.gz: 66b5d9f8d1cac6064b1f2aba3078bbb20cf096713e435b235f76a63ebebafc15
4
+ data.tar.gz: c31e5113a14db1b4cbde2d02f5493bba044994972d2248942c5e73fd6e930d54
5
5
  SHA512:
6
- metadata.gz: f3fdb5a3610897a2e414669922c8ac12b82a62a8e32dc28646625ce9246c3c2d1516715b06bceb28af223347876313085acc75cbd01753a35a910980b6fd2d2b
7
- data.tar.gz: 2920da0303176aec6b91d8f69ba178ffa09b3aad9cc68d5e7e7f7524532caed0434d051bcab417834880974b84932490f6d21e902bc5675d5af378ba2fbeb22d
6
+ metadata.gz: 1df12f407995ed78cc8dfb7c45876493546c5f46ede4b0391e7ee552f37c161b2068432a498923821b7fa662389fb3d57113f3284cf5c086cc9eb42bd82a4f20
7
+ data.tar.gz: f7ea8fad9f1c3f618a785642ff69d7f3a732e2df8a3139e1e81b8034dc5e54e772eab36e8296fe118d85bed98d151ff6b286e9e5775881093585ec7c1033b0c5
@@ -7,8 +7,10 @@ Lldb_source_path = File.expand_path('~')+'/.isource_lldb'
7
7
  Lldb_file_path = File.expand_path('~')+'/.isource_lldb/isource_lldb.py'
8
8
  Commond_str = 'command script import '+Lldb_file_path
9
9
 
10
- Gem.post_install do
11
-
10
+ Gem.post_install do |installer|
11
+ if installer.spec.name != "isource_lldb"
12
+ return
13
+ end
12
14
  # 配置 .lldbinit
13
15
  if File.exist?(Lldb_init_path)
14
16
  f=File.new(Lldb_init_path,"a+")
@@ -36,11 +38,15 @@ Gem.post_install do
36
38
  if !File.exist?(Lldb_source_path)
37
39
  Dir.mkdir(Lldb_source_path)
38
40
  end
41
+
39
42
  File.chmod(0775,Lldb_source_path)
40
- scriptPath = File.dirname(Pathname.new(__FILE__).realpath)
41
- File.rename scriptPath+'/setup', Lldb_file_path
42
- File.chmod(0775,Lldb_file_path)
43
43
 
44
+ scriptPath = File.dirname(Pathname.new(__FILE__).realpath)
45
+ if File.exist?(scriptPath+'/setup')
46
+ File.rename scriptPath+'/setup', Lldb_file_path
47
+ File.chmod(0775,Lldb_file_path)
48
+ end
49
+
44
50
  puts "Please use the isource command in your Xcode LLDB."
45
51
  end
46
52
 
@@ -74,7 +80,11 @@ def remove_file()
74
80
 
75
81
  end
76
82
 
77
- Gem.post_uninstall do
83
+ Gem.post_uninstall do |installer|
84
+ if installer.spec.name != "isource_lldb"
85
+ return
86
+ end
87
+
78
88
  if File.exist?(Lldb_source_path)
79
89
  remove_dir(Lldb_source_path)
80
90
  end
data/lib/setup CHANGED
@@ -1,301 +1,392 @@
1
1
  # !/usr/bin/env python3
2
- import lldb #line:5:import lldb
3
- import os #line:6:import os
4
- import re #line:7:import re
5
- import time #line:8:import time
6
- import datetime #line:9:import datetime
7
- import queue #line:10:import queue
8
- import shutil #line:11:import shutil
9
- import threading #line:12:import threading
10
- import sys #line:13:import sys
11
- from threading import Thread #line:14:from threading import Thread
12
- user_dir =os .path .expanduser ('~')#line:16:user_dir = os.path.expanduser('~')
13
- source_lldb_dir =user_dir +"/.isource_lldb"#line:17:source_lldb_dir = user_dir + "/.isource_lldb"
14
- source_code_dir =source_lldb_dir +"/source_code"#line:18:source_code_dir = source_lldb_dir + "/source_code"
15
- drrr_job_inis_dir =source_lldb_dir +"/drrr_job_inis"#line:19:drrr_job_inis_dir = source_lldb_dir + "/drrr_job_inis"
16
- drrr_job_inis_dir_modules =drrr_job_inis_dir +"/modules"#line:20:drrr_job_inis_dir_modules = drrr_job_inis_dir + "/modules"
17
- drrr_job_inis_addr ='ssh://git@gitlab.qiyi.domain:10022/qytools/drrr_job_inis.git'#line:21:drrr_job_inis_addr = 'ssh://git@gitlab.qiyi.domain:10022/qytools/drrr_job_inis.git'
18
- project_info_cache =source_lldb_dir +"/project_info_cache.txt"#line:22:project_info_cache = source_lldb_dir + "/project_info_cache.txt"
19
- def lz_error (O0OO0O000000OOO00 ):#line:24:def lz_error(reason_t):
20
- print ("internal error code : "+str (O0OO0O000000OOO00 ))#line:25:print("internal error code : " + str(reason_t))
21
- def lz_log (O0OOO0O00O0OOO000 ):#line:27:def lz_log(reason_t):
22
- pass #line:30:pass
23
- def manage_source_dir ():#line:33:def manage_source_dir():
24
- OOOO0O000000OOO0O =os .path .exists (source_lldb_dir )#line:34:source_lldb_dir_isExists = os.path.exists(source_lldb_dir)
25
- if not OOOO0O000000OOO0O :#line:35:if not source_lldb_dir_isExists:
26
- os .makedirs (source_lldb_dir )#line:36:os.makedirs(source_lldb_dir)
27
- os .makedirs (source_code_dir )#line:37:os.makedirs(source_code_dir)
28
- else :#line:38:else:
29
- OOOO00OO0000O0O0O =os .path .exists (source_code_dir )#line:39:source_code_dir_isExists = os.path.exists(source_code_dir)
30
- if not OOOO00OO0000O0O0O :#line:40:if not source_code_dir_isExists:
31
- os .makedirs (source_code_dir )#line:41:os.makedirs(source_code_dir)
32
- def create_cache_file ():#line:44:def create_cache_file():
33
- O000000O0000OO00O =os .path .exists (project_info_cache )#line:45:project_info_cache_isExists = os.path.exists(project_info_cache)
34
- if not O000000O0000OO00O :#line:46:if not project_info_cache_isExists:
35
- O000OOO0OO0OOO0OO =open (project_info_cache ,'w')#line:47:file = open(project_info_cache,'w')
36
- O000OOO0OO0OOO0OO .close ()#line:48:file.close()
37
- def write_cache_file (O00O00000O000000O ):#line:50:def write_cache_file(params):
38
- if O00O00000O000000O [0 ]!=None and O00O00000O000000O [1 ]!=None and O00O00000O000000O [2 ]!=None and O00O00000O000000O [3 ]!=None :#line:51:if params[0] != None and params[1] != None and params[2] != None and params[3] != None :
39
- O0OO0OOOO00O0O0OO =list (O00O00000O000000O )#line:52:temp = list(params)
40
- OOOO0OO0OO0OOO00O ='---'.join (O0OO0OOOO00O0O0OO )#line:53:resutl = '---'.join(temp)
41
- O0O0O0O0O000OO00O =open (project_info_cache ,'a+')#line:54:file = open(project_info_cache,'a+')
42
- O0O0O0O0O000OO00O .write (OOOO0OO0OO0OOO00O +"\n")#line:55:file.write(resutl+"\n")
43
- O0O0O0O0O000OO00O .close ()#line:56:file.close()
44
- def read_cache_file (O00O00OOOO00O0OO0 ):#line:58:def read_cache_file(project_name):
45
- OOO0OOOOOOO00OOOO =None #line:59:project_info = None
46
- with open (project_info_cache ,'r',encoding ='utf-8')as O00OO00OO00OO00OO :#line:60:with open(project_info_cache,'r',encoding='utf-8') as f:
47
- O000O0OOOOOO00O0O =O00OO00OO00OO00OO .readlines ()#line:61:content_lines = f.readlines()
48
- for OOOO0000000O0OO0O in range (0 ,len (O000O0OOOOOO00O0O )):#line:62:for i in range(0, len(content_lines)):
49
- O0OOOO000OO0O00OO =re .search (O00O00OOOO00O0OO0 ,O000O0OOOOOO00O0O [OOOO0000000O0OO0O ])#line:63:result = re.search(project_name, content_lines[i])
50
- if O0OOOO000OO0O00OO !=None :#line:64:if result != None:
51
- OOOOOO0OO000OOOO0 =O000O0OOOOOO00O0O [OOOO0000000O0OO0O ]#line:65:content_lines_temp = content_lines[i]
52
- OOOOO00O0O0O0OOOO =OOOOOO0OO000OOOO0 .split ('---')#line:66:infos = content_lines_temp.split('---')
53
- OOO0OOOOOOO00OOOO =tuple (OOOOO00O0O0O0OOOO )#line:67:project_info = tuple(infos)
54
- break #line:68:break
55
- return OOO0OOOOOOO00OOOO #line:69:return project_info
56
- def manage_job_inis ():#line:72:def manage_job_inis():
57
- OO000O0OO00OOO0OO =os .path .exists (drrr_job_inis_dir )#line:73:drrr_job_inis_dir_isExists = os.path.exists(drrr_job_inis_dir)
58
- if OO000O0OO00OOO0OO ==True :#line:74:if drrr_job_inis_dir_isExists == True:
59
- OOOO000O0000OOO0O ="cd "+drrr_job_inis_dir +"; git pull"#line:75:update = "cd " + drrr_job_inis_dir + "; git pull"
60
- O0O000OOO0O0O0O00 =os .popen (OOOO000O0000OOO0O )#line:76:result = os.popen(update)
61
- OO00OO0OOO0O000O0 =O0O000OOO0O0O0O00 .read ()#line:77:content = result.read()
62
- O0OOOO0O0OO000O00 =re .search ("fatal",OO00OO0OOO0O000O0 )#line:78:fatal = re.search("fatal", content)
63
- if O0OOOO0O0OO000O00 !=None :#line:79:if fatal != None:
64
- lz_error (0 )#line:80:lz_error(0)
65
- else :#line:81:else:
66
- OOOOOO0OO0O000OOO ="git clone "+drrr_job_inis_addr +" "+drrr_job_inis_dir #line:82:dowmload = "git clone "+ drrr_job_inis_addr +" "+ drrr_job_inis_dir
67
- O0O000OOO0O0O0O00 =os .popen (OOOOOO0OO0O000OOO )#line:83:result = os.popen(dowmload)
68
- OO00OO0OOO0O000O0 =O0O000OOO0O0O0O00 .read ()#line:84:content = result.read()
69
- O0OOOO0O0OO000O00 =re .search ("fatal",OO00OO0OOO0O000O0 )#line:85:fatal = re.search("fatal", content)
70
- if O0OOOO0O0OO000O00 !=None :#line:86:if fatal != None:
71
- lz_error (0 )#line:87:lz_error(0)
72
- def get_debug_file_path (OOOO000000OO000OO ):#line:90:def get_debug_file_path(command_t):
73
- O00O00O000OO0O00O =lldb .debugger .GetCommandInterpreter ()#line:91:interpreter = lldb.debugger.GetCommandInterpreter()
74
- OOOO0O0OO000OOO0O =lldb .SBCommandReturnObject ()#line:92:returnObject = lldb.SBCommandReturnObject()
75
- O00O00O000OO0O00O .HandleCommand ('image lookup -v --address '+OOOO000000OO000OO ,OOOO0O0OO000OOO0O )#line:93:interpreter.HandleCommand('image lookup -v --address ' + command_t, returnObject)
76
- OO0OO0O0O0O00O0O0 =OOOO0O0OO000OOO0O .GetOutput ()#line:94:output = returnObject.GetOutput()
77
- O00OOOOOO00O0OOO0 =""#line:96:debug_file_path = ""
78
- O00O00O00O0O0O0OO =re .search ('error',OO0OO0O0O0O00O0O0 )#line:97:result = re.search('error', output)
79
- if O00O00O00O0O0O0OO !=None :#line:98:if result != None:
80
- return O00OOOOOO00O0OOO0 #line:99:return debug_file_path
81
- OO000OO0OO000OOOO =OO0OO0O0O0O00O0O0 .split ("\n")#line:102:str_to_array = output.split("\n")
82
- if len (OO000OO0OO000OOOO )>3 :#line:103:if len(str_to_array)>3:
83
- O0OOO0OOO00O0O0O0 =OO000OO0OO000OOOO [3 ].strip ()#line:104:unit_str = str_to_array[3].strip()
84
- OOO0O00000OO000OO =O0OOO0OOO00O0O0O0 .split (",")#line:106:file_array = unit_str.split(",")
85
- if len (OOO0O00000OO000OO )>1 :#line:107:if len(file_array)>1:
86
- OOOOO00OOOOOOO0O0 =OOO0O00000OO000OO [1 ].strip ()#line:108:file = file_array[1].strip()
87
- O0O000000O0000OOO =OOOOO00OOOOOOO0O0 .split ("=")#line:110:name_array = file.split("=")
88
- if len (O0O000000O0000OOO )>1 :#line:111:if len(name_array)>1:
89
- OO0OOOOOOO0OOOOO0 =O0O000000O0000OOO [1 ].strip ()#line:112:name = name_array[1].strip()
90
- O00OOOOOO00O0OOO0 =OO0OOOOOOO0OOOOO0 .replace ('\"','')#line:114:debug_file_path = name.replace('\"','')
91
- return O00OOOOOO00O0OOO0 #line:116:return debug_file_path
92
- def get_inis_info (OO00O00O0O00OO00O ):#line:119:def get_inis_info(debug_file_path):
93
- O0O000OOOO00O00OO =None #line:121:project_name_t = None
94
- OO00000OOO0O00OOO =None #line:122:source_path_t = None
95
- O00OOO0000OO00OOO =None #line:123:match_inis_name = None
96
- OOO00O00O0OO0OO00 =None #line:124:source_code_address = None
97
- O0O00O0OO0O0000OO =OO00O00O0O00OO00O .split ("/")#line:127:paths = debug_file_path.split("/")
98
- for OOO00000OOOOOO0OO in range (0 ,len (O0O00O0OO0O0000OO )):#line:128:for i in range(0, len(paths)):
99
- if O0O00O0OO0O0000OO [OOO00000OOOOOO0OO ]=="MODULE_DIR":#line:129:if paths[i] == "MODULE_DIR":
100
- OO00000OOO0O00OOO =O0O00O0OO0O0000OO [OOO00000OOOOOO0OO +1 ]#line:130:source_path_t = paths[i+1]
101
- O0O000OOOO00O00OO =O0O00O0OO0O0000OO [OOO00000OOOOOO0OO +1 ]#line:131:project_name_t = paths[i+1]
102
- break #line:132:break
103
- if OO00000OOO0O00OOO !=None and len (OO00000OOO0O00OOO )>0 :#line:139:if source_path_t != None and len(source_path_t) > 0 :
104
- OOOOOOOOOO0O0OO0O =os .listdir (drrr_job_inis_dir_modules )#line:140:job_inis_list = os.listdir(drrr_job_inis_dir_modules)
105
- for OOO00000OOOOOO0OO in range (0 ,len (OOOOOOOOOO0O0OO0O )):#line:141:for i in range(0, len(job_inis_list)):
106
- O0OOOOO0OO00O0O00 =drrr_job_inis_dir_modules +"/"+OOOOOOOOOO0O0OO0O [OOO00000OOOOOO0OO ]#line:142:job_inis_dir_t = drrr_job_inis_dir_modules + "/" + job_inis_list[i]
107
- with open (O0OOOOO0OO00O0O00 ,'r',encoding ='utf-8')as OO000O0000O000O0O :#line:144:with open(job_inis_dir_t,'r',encoding='utf-8') as f:
108
- O0O00OO00OO00OO00 =OO000O0000O000O0O .readlines ()#line:145:content_lines = f.readlines()
109
- for OOO00000OOOOOO0OO in range (0 ,len (O0O00OO00OO00OO00 )):#line:146:for i in range(0, len(content_lines)):
110
- OO000O0O00000OOO0 =re .search (OO00000OOO0O00OOO ,O0O00OO00OO00OO00 [OOO00000OOOOOO0OO ])#line:147:result = re.search(source_path_t, content_lines[i])
111
- if OO000O0O00000OOO0 !=None :#line:148:if result != None:
112
- O00OOO0000OO00OOO =OOOOOOOOOO0O0OO0O [OOO00000OOOOOO0OO ]#line:149:match_inis_name = job_inis_list[i]
113
- OOOOO0000OO00OO0O =OOO00000OOOOOO0OO -5 if OOO00000OOOOOO0OO >5 else 0 #line:150:start = i - 5 if i > 5 else 0
114
- OO0000OOOO000OOO0 =OOO00000OOOOOO0OO +5 if OOO00000OOOOOO0OO +5 <len (O0O00OO00OO00OO00 )else len (O0O00OO00OO00OO00 )#line:151:end = i + 5 if i + 5 < len(content_lines) else len(content_lines)
115
- for O0OO0OO000O000O0O in range (OOOOO0000OO00OO0O ,OO0000OOOO000OOO0 ):#line:152:for j in range(start, end):
116
- O0O0O0O0OO00O0OOO =re .findall ("ssh://git@gitlab.qiyi.domain:[^/]+?/.*?"+O0O000OOOO00O00OO +"*?[^0~9]?.git",O0O00OO00OO00OO00 [O0OO0OO000O000O0O ])#line:153:result_t = re.findall("ssh://git@gitlab.qiyi.domain:[^/]+?/.*?"+project_name_t+"*?[^0~9]?.git",content_lines[j])
117
- if len (O0O0O0O0OO00O0OOO )>0 :#line:154:if len(result_t) > 0 :
118
- OOO00O00O0OO0OO00 =O0O0O0O0OO00O0OOO [0 ]#line:155:source_code_address = result_t[0]
119
- break #line:156:break
120
- if OOO00O00O0OO0OO00 !=None :#line:157:if source_code_address != None:
121
- break #line:158:break
122
- if OOO00O00O0OO0OO00 !=None :#line:159:if source_code_address != None:
123
- break #line:160:break
124
- return (O0O000OOOO00O00OO ,OOO00O00O0OO0OO00 )#line:179:return (project_name_t,source_code_address)
125
- def download_git_source_code (OO00000O000O000OO ,OOOO00OOO0O00OOO0 ):#line:183:def download_git_source_code(p_name,git_address):
126
- OOOOO0O0OOOOOO000 =source_code_dir +"/"+OO00000O000O000OO #line:184:project_dir = source_code_dir + "/" + p_name
127
- O0O000O00OO0OOO00 =os .path .exists (OOOOO0O0OOOOOO000 )#line:185:project_dir_isExists = os.path.exists(project_dir)
128
- if not O0O000O00OO0OOO00 :#line:187:if not project_dir_isExists:
129
- os .makedirs (OOOOO0O0OOOOOO000 )#line:188:os.makedirs(project_dir)
130
- O0O0O0O0OOO0OOO0O ="git clone "+OOOO00OOO0O00OOO0 +" "+OOOOO0O0OOOOOO000 #line:189:dowmload = "git clone "+ git_address +" " + project_dir
131
- OO0OO00O0O0OOO0OO =os .popen (O0O0O0O0OOO0OOO0O )#line:190:result = os.popen(dowmload)
132
- OOOO00O0OOOOO0OO0 =OO0OO00O0O0OOO0OO .read ()#line:191:content = result.read()
133
- O0OOOOOOOO0O0000O =re .search ("fatal",OOOO00O0OOOOO0OO0 )#line:192:fatal = re.search("fatal", content)
134
- if O0OOOOOOOO0O0000O !=None :#line:193:if fatal != None:
135
- return ""#line:194:return ""
136
- else :#line:195:else:
137
- OOOO0OOO0O0O00O00 ="cd "+OOOOO0O0OOOOOO000 +"; git pull"#line:196:update = "cd " + project_dir + "; git pull"
138
- OO0OO00O0O0OOO0OO =os .popen (OOOO0OOO0O0O00O00 )#line:197:result = os.popen(update)
139
- OOOO00O0OOOOO0OO0 =OO0OO00O0O0OOO0OO .read ()#line:198:content = result.read()
140
- O0OOOOOOOO0O0000O =re .search ("fatal",OOOO00O0OOOOO0OO0 )#line:199:fatal = re.search("fatal", content)
141
- if O0OOOOOOOO0O0000O !=None :#line:200:if fatal != None:
142
- return ""#line:201:return ""
143
- return OOOOO0O0OOOOOO000 #line:203:return project_dir
144
- def get_update_time ():#line:206:def get_update_time():
145
- OO0O0OO0O0OO0OOO0 =user_dir +"/.cocoapods/repos/qiyi-podspecs/"#line:208:specs_dir = user_dir + "/.cocoapods/repos/qiyi-podspecs/"
146
- O0000O000000O0OOO =os .path .getmtime (OO0O0OO0O0OO0OOO0 )#line:209:timestamp = os.path.getmtime(specs_dir)
147
- O0OOO0000O00OO0O0 =time .localtime (O0000O000000O0OOO )#line:210:timeStruct = time.localtime(timestamp)
148
- OOOO0OO00OOO0OO0O =time .strftime ("%m %d %H:%M:%S %Y",O0OOO0000O00OO0O0 )#line:213:time_str = time.strftime("%m %d %H:%M:%S %Y",timeStruct)
149
- OOO0O00OO0OOO0OO0 =OOOO0OO00OOO0OO0O .split (" ")#line:214:file_array = time_str.split(" ")
150
- O0O0OOO0O0O0000OO =OOO0O00OO0OOO0OO0 [0 ]#line:215:month = file_array[0]
151
- if O0O0OOO0O0O0000OO =='1':#line:217:if month == '1':
152
- O0O0OOO0O0O0000OO ='Jan'#line:218:month = 'Jan'
153
- if O0O0OOO0O0O0000OO =='2':#line:219:if month == '2':
154
- O0O0OOO0O0O0000OO ='Feb'#line:220:month = 'Feb'
155
- if O0O0OOO0O0O0000OO =='3':#line:221:if month == '3':
156
- O0O0OOO0O0O0000OO ='Mar'#line:222:month = 'Mar'
157
- if O0O0OOO0O0O0000OO =='4':#line:223:if month == '4':
158
- O0O0OOO0O0O0000OO ='Apr'#line:224:month = 'Apr'
159
- if O0O0OOO0O0O0000OO =='5':#line:225:if month == '5':
160
- O0O0OOO0O0O0000OO ='May'#line:226:month = 'May'
161
- if O0O0OOO0O0O0000OO =='6':#line:227:if month == '6':
162
- O0O0OOO0O0O0000OO ='Jun'#line:228:month = 'Jun'
163
- if O0O0OOO0O0O0000OO =='7':#line:229:if month == '7':
164
- O0O0OOO0O0O0000OO ='Jul'#line:230:month = 'Jul'
165
- if O0O0OOO0O0O0000OO =='8':#line:231:if month == '8':
166
- O0O0OOO0O0O0000OO ='Aug'#line:232:month = 'Aug'
167
- if O0O0OOO0O0O0000OO =='9':#line:233:if month == '9':
168
- O0O0OOO0O0O0000OO ='Sep'#line:234:month = 'Sep'
169
- if O0O0OOO0O0O0000OO =='10':#line:235:if month == '10':
170
- O0O0OOO0O0O0000OO ='Oct'#line:236:month = 'Oct'
171
- if O0O0OOO0O0O0000OO =='11':#line:237:if month == '11':
172
- O0O0OOO0O0O0000OO ='Nov'#line:238:month = 'Nov'
173
- if O0O0OOO0O0O0000OO =='12':#line:239:if month == '12':
174
- O0O0OOO0O0O0000OO ='Dec'#line:240:month = 'Dec'
175
- OOO0O00OO0OOO0OO0 [0 ]=O0O0OOO0O0O0000OO #line:242:file_array[0] = month
176
- return ' '.join (OOO0O00OO0OOO0OO0 )#line:244:return ' '.join(file_array)
177
- def change_source_code_commit (O0O0O0OO0OO0OO0OO ):#line:247:def change_source_code_commit(source_code_path_t):
178
- OO0OOOOOOOOO000OO =get_update_time ()#line:250:last_update_time = get_update_time()
179
- OO000OOO0000OOOOO ="cd "+O0O0O0OO0OO0OO0OO +"; git rev-list -n 1 --before=\""+OO0OOOOOOOOO000OO +"\" master"#line:252:update = "cd " + source_code_path_t + "; git rev-list -n 1 --before=\""+ last_update_time +"\" master"
180
- OO000OOO000OO0000 =os .popen (OO000OOO0000OOOOO )#line:253:result = os.popen(update)
181
- OO00OOO0000O0OOO0 =OO000OOO000OO0000 .read ()#line:254:content = result.read()
182
- O00O00OOO00O0000O =re .search ("fatal",OO00OOO0000O0OOO0 )#line:255:fatal = re.search("fatal", content)
183
- if O00O00OOO00O0000O !=None :#line:256:if fatal != None:
184
- return False #line:257:return False
185
- else :#line:258:else:
186
- return True #line:259:return True
187
- def checkError (O0O00OOOOOOOO0000 ,OOOOOO0O000000OOO ):#line:261:def checkError(result,keywords):
188
- OO00O0O00O00O000O =re .search (OOOOOO0O000000OOO ,O0O00OOOOOOOO0000 )#line:262:flag = re.search(keywords, result)
189
- if OO00O0O00O00O000O ==None :#line:263:if flag == None :
190
- return True #line:264:return True
191
- else :#line:265:else:
192
- return False #line:266:return False
193
- def map_source_code (OO00OO00O0O00O000 ,OO00O0O00O0O0000O ,O00O0OOO000000OO0 ):#line:269:def map_source_code(source_code_path_t,debug_code_path_t,reveal_path_t):
194
- OO0000000OOOOO0OO =OO00O0O00O0O0000O .split (O00O0OOO000000OO0 )#line:270:paths_t = debug_code_path_t.split(reveal_path_t)
195
- OO00O0O0O0O0O0OO0 =OO0000000OOOOO0OO [0 ]#line:271:debug_t = paths_t[0]
196
- OO0O0OO0O0OO0O000 =lldb .debugger .GetCommandInterpreter ()#line:272:interpreter = lldb.debugger.GetCommandInterpreter()
197
- OOO000OO0O0O0000O =lldb .SBCommandReturnObject ()#line:273:returnObject = lldb.SBCommandReturnObject()
198
- OO0O0OO0O0OO0O000 .HandleCommand ("settings append target.source-map "+OO00O0O0O0O0O0OO0 +" "+OO00OO00O0O00O000 ,OOO000OO0O0O0000O )#line:274:interpreter.HandleCommand("settings append target.source-map "+ debug_t +" " + source_code_path_t,returnObject)
199
- OOOO00OO0OOOO00OO =OOO000OO0O0O0000O .GetOutput ()#line:275:output = returnObject.GetOutput()
200
- O00OO0OOO0OOOO00O =re .search ('error',OOOO00OO0OOOO00OO )#line:276:flag = re.search('error', output)
201
- if O00OO0OOO0OOOO00O ==None :#line:277:if flag == None :
202
- return True #line:278:return True
203
- else :#line:279:else:
204
- return False #line:280:return False
205
- def thread_step_inst (O0OO0O0OOO00OOOO0 ):#line:283:def thread_step_inst(tmep):
206
- pass #line:284:pass
207
- def adjustStackFrame (OO0O0OO00OOOO00OO ):#line:287:def adjustStackFrame(debugger):
208
- OO0O0OO00OOOO00OO .SetAsync (True )#line:298:debugger.SetAsync(True)
209
- OOO00O0OO00OOO0O0 =OO0O0OO00OOOO00OO .GetSelectedTarget ().GetProcess ().GetSelectedThread ()#line:303:thread = debugger.GetSelectedTarget().GetProcess().GetSelectedThread()
210
- O00O0000O0OO0OO00 =OOO00O0OO00OOO0O0 .GetSelectedFrame ().GetFrameID ()#line:304:frame_num = thread.GetSelectedFrame().GetFrameID()
211
- OO0000O00OO0O000O =lldb .debugger .GetCommandInterpreter ()#line:306:interpreter = lldb.debugger.GetCommandInterpreter()
212
- O00OOO000O00O000O =lldb .SBCommandReturnObject ()#line:307:returnObject = lldb.SBCommandReturnObject()
213
- OO0000O00OO0O000O .HandleCommand ("thread step-inst",O00OOO000O00O000O )#line:311:interpreter.HandleCommand("thread step-inst",returnObject)
214
- OOO00OO0O00O000OO =O00OOO000O00O000O .GetOutput ()#line:312:output = returnObject.GetOutput()
215
- O00OOO000O0OO00O0 =re .search ('error',OOO00OO0O00O000OO )#line:313:result = re.search('error', output)
216
- if O00OOO000O0OO00O0 !=None :#line:314:if result != None:
217
- return False #line:315:return False
218
- time .sleep (0.5 )#line:317:time.sleep(0.5)
219
- OO0000O00OO0O000O .HandleCommand ("frame select "+str (O00O0000O0OO0OO00 ),O00OOO000O00O000O )#line:326:interpreter.HandleCommand("frame select "+str(frame_num),returnObject)
220
- OOO00OO0O00O000OO =O00OOO000O00O000O .GetOutput ()#line:327:output = returnObject.GetOutput()
221
- O00OOO000O0OO00O0 =re .search ('error',OOO00OO0O00O000OO )#line:328:result = re.search('error', output)
222
- if O00OOO000O0OO00O0 !=None :#line:330:if result != None:
223
- return False #line:331:return False
224
- def clean (OO00O0O0O000O0OOO ):#line:333:def clean(filepath):
225
- O0O00OOO0OO00OOOO =os .listdir (OO00O0O0O000O0OOO )#line:334:del_list = os.listdir(filepath)
226
- for O00OOOOOO0OO00OOO in O0O00OOO0OO00OOOO :#line:335:for f in del_list:
227
- OO00O0O00O000O0O0 =os .path .join (OO00O0O0O000O0OOO ,O00OOOOOO0OO00OOO )#line:336:file_path = os.path.join(filepath, f)
228
- if os .path .isfile (OO00O0O00O000O0O0 ):#line:337:if os.path.isfile(file_path):
229
- os .remove (OO00O0O00O000O0O0 )#line:338:os.remove(file_path)
230
- elif os .path .isdir (OO00O0O00O000O0O0 ):#line:339:elif os.path.isdir(file_path):
231
- shutil .rmtree (OO00O0O00O000O0O0 )#line:340:shutil.rmtree(file_path)
232
- pass #line:341:pass
233
- def processing (O0OO0O000OOO0O0OO ):#line:351:def processing(temp):
234
- sys .stdout .write (O0OO0O000OOO0O0OO )#line:352:sys.stdout.write(temp)
235
- sys .stdout .flush ()#line:353:sys.stdout.flush()
236
- def start (OOO0OO0000OO0O0O0 ,O000000O000000000 ):#line:355:def start(debugger,command):
237
- processing ("processing")#line:357:processing("processing")
238
- processing (".")#line:360:processing(".")
239
- lz_log (1 )#line:363:lz_log(1)
240
- O0000O0000OO00O0O =get_debug_file_path (O000000O000000000 )#line:364:debug_file_path = get_debug_file_path(command)
241
- lz_log (O0000O0000OO00O0O )#line:365:lz_log(debug_file_path)
242
- if O0000O0000OO00O0O ==None or len (O0000O0000OO00O0O )==0 :#line:366:if debug_file_path == None or len(debug_file_path) == 0:
243
- lz_error (1 )#line:367:lz_error(1)
244
- return #line:368:return
245
- processing (".")#line:373:processing(".")
246
- lz_log (2 )#line:374:lz_log(2)
247
- O00OOO0O0OO00O0O0 =get_inis_info (O0000O0000OO00O0O )#line:375:project_info = get_inis_info(debug_file_path)
248
- lz_log (O00OOO0O0OO00O0O0 )#line:376:lz_log(project_info)
249
- if O00OOO0O0OO00O0O0 [0 ]==None or O00OOO0O0OO00O0O0 [1 ]==None :#line:377:if project_info[0] == None or project_info[1] == None:
250
- lz_error (2 )#line:378:lz_error(2)
251
- return #line:379:return
252
- processing (".")#line:383:processing(".")
253
- lz_log (3 )#line:384:lz_log(3)
254
- OO0OOOOO000O0000O =download_git_source_code (O00OOO0O0OO00O0O0 [0 ],O00OOO0O0OO00O0O0 [1 ])#line:385:source_code_path = download_git_source_code(project_info[0],project_info[1])
255
- lz_log (OO0OOOOO000O0000O )#line:386:lz_log(source_code_path)
256
- if OO0OOOOO000O0000O ==None or len (OO0OOOOO000O0000O )==0 :#line:387:if source_code_path == None or len(source_code_path) == 0:
257
- lz_error (3 )#line:388:lz_error(3)
258
- return #line:389:return
259
- processing (".")#line:393:processing(".")
260
- lz_log (4 )#line:394:lz_log(4)
261
- OOOO0O00OO0O00OO0 =change_source_code_commit (OO0OOOOO000O0000O )#line:395:isSuccess = change_source_code_commit(source_code_path)
262
- lz_log (OOOO0O00OO0O00OO0 )#line:396:lz_log(isSuccess)
263
- if OOOO0O00OO0O00OO0 ==False :#line:397:if isSuccess == False:
264
- lz_error (4 )#line:398:lz_error(4)
265
- return #line:399:return
266
- processing (".")#line:403:processing(".")
267
- lz_log (5 )#line:404:lz_log(5)
268
- OOOO0O00OO0O00OO0 =map_source_code (OO0OOOOO000O0000O ,O0000O0000OO00O0O ,O00OOO0O0OO00O0O0 [0 ])#line:405:isSuccess = map_source_code(source_code_path,debug_file_path,project_info[0])
269
- lz_log (OOOO0O00OO0O00OO0 )#line:406:lz_log(isSuccess)
270
- if OOOO0O00OO0O00OO0 ==False :#line:407:if isSuccess == False:
271
- lz_error (5 )#line:408:lz_error(5)
272
- return #line:409:return
273
- print (".")#line:413:print(".")
274
- lz_log (6 )#line:414:lz_log(6)
275
- OOOO0O00OO0O00OO0 =adjustStackFrame (OOO0OO0000OO0O0O0 )#line:415:isSuccess = adjustStackFrame(debugger)
276
- lz_log (OOOO0O00OO0O00OO0 )#line:416:lz_log(isSuccess)
277
- if OOOO0O00OO0O00OO0 ==False :#line:417:if isSuccess == False:
278
- lz_error (6 )#line:418:lz_error(6)
279
- return #line:419:return
280
- def help ():#line:422:def help():
281
- print ("Usage:")#line:424:print("Usage:")
282
- print (" isource memory_address eg:isource 0x8badf00d")#line:425:print(" isource memory_address eg:isource 0x8badf00d")
283
- print ("Commands:")#line:427:print("Commands:")
284
- print (" + help command help")#line:428:print(" + help command help")
285
- print (" + clean clean cache")#line:429:print(" + clean clean cache")
286
- pass #line:430:pass
287
- def helloworld (O0O0000O000000OO0 ,OOO0OOO0O0O0OO0O0 ,O00000O0O0OOO0OO0 ,OOO0O0O000OOOO000 ):#line:433:def helloworld(debugger, command, result, internal_dict):
288
- if OOO0OOO0O0O0OO0O0 ==None or OOO0OOO0O0O0OO0O0 =='-h':#line:435:if command == None or command == '-h':
289
- help ()#line:436:help()
290
- elif OOO0OOO0O0O0OO0O0 =='-c':#line:437:elif command == '-c':
291
- clean (source_code_dir )#line:438:clean(source_code_dir)
292
- elif re .match ('0x.*[a-z0-9]',OOO0OOO0O0O0OO0O0 )!=None :#line:439:elif re.match('0x.*[a-z0-9]', command) != None :
293
- start (O0O0000O000000OO0 ,OOO0OOO0O0O0OO0O0 )#line:440:start(debugger,command)
294
- else :#line:441:else:
295
- print ('error: '+OOO0OOO0O0O0OO0O0 +' is not a valid command.')#line:442:print('error: ' + command +' is not a valid command.')
296
- help ()#line:443:help()
297
- def __O0O000O0OOOO0O0O0 (O000O0OO0OOOOOOO0 ,O00OOO00OO000O0OO ):#line:446:def __lldb_init_module(debugger, internal_dict):
298
- manage_source_dir ()#line:448:manage_source_dir()
299
- manage_job_inis ()#line:452:manage_job_inis()
300
- O000O0OO0OOOOOOO0 .HandleCommand ("command script add -f isource_lldb.helloworld isource")#line:454:debugger.HandleCommand("command script add -f isource_lldb.helloworld isource")
2
+ import lldb #line:5
3
+ import os #line:6
4
+ import re #line:7
5
+ import time #line:8
6
+ import datetime #line:9
7
+ import queue #line:10
8
+ import shutil #line:11
9
+ import threading #line:12
10
+ import sys #line:13
11
+ from threading import Thread #line:14
12
+ user_dir =os .path .expanduser ('~')#line:16
13
+ source_lldb_dir =user_dir +"/.isource_lldb"#line:17
14
+ source_code_dir =source_lldb_dir +"/source_code"#line:18
15
+ drrr_job_inis_dir =source_lldb_dir +"/drrr_job_inis"#line:19
16
+ drrr_job_inis_dir_modules =drrr_job_inis_dir +"/modules"#line:20
17
+ drrr_job_inis_addr ='ssh://git@gitlab.qiyi.domain:10022/qytools/drrr_job_inis.git'#line:21
18
+ project_info_cache =source_lldb_dir +"/project_info_cache.txt"#line:22
19
+ def lz_error (O00OO000OOOOOOO00 ):#line:24
20
+ print ("internal error code : "+str (O00OO000OOOOOOO00 ))#line:25
21
+ def lz_log (O0OOO000O0OO00O0O ):#line:27
22
+ pass #line:30
23
+ def manage_source_dir ():#line:33
24
+ OOO0OO00OO0O00O0O =os .path .exists (source_lldb_dir )#line:34
25
+ if not OOO0OO00OO0O00O0O :#line:35
26
+ os .makedirs (source_lldb_dir )#line:36
27
+ os .makedirs (source_code_dir )#line:37
28
+ else :#line:38
29
+ OO0OOOO00000OO00O =os .path .exists (source_code_dir )#line:39
30
+ if not OO0OOOO00000OO00O :#line:40
31
+ os .makedirs (source_code_dir )#line:41
32
+ def create_cache_file ():#line:44
33
+ OOO00O00OOO0OOOO0 =os .path .exists (project_info_cache )#line:45
34
+ if not OOO00O00OOO0OOOO0 :#line:46
35
+ OO0OOOOO00OO00OOO =open (project_info_cache ,'w')#line:47
36
+ OO0OOOOO00OO00OOO .close ()#line:48
37
+ def write_cache_file (OO000OO00OO00OOOO ):#line:50
38
+ if OO000OO00OO00OOOO [0 ]!=None and OO000OO00OO00OOOO [1 ]!=None and OO000OO00OO00OOOO [2 ]!=None and OO000OO00OO00OOOO [3 ]!=None :#line:51
39
+ O000OOO000O0O0O0O =list (OO000OO00OO00OOOO )#line:52
40
+ OO0OOO0O000OOOOO0 ='---'.join (O000OOO000O0O0O0O )#line:53
41
+ O0OOOO00OOO0O0OO0 =open (project_info_cache ,'a+')#line:54
42
+ O0OOOO00OOO0O0OO0 .write (OO0OOO0O000OOOOO0 +"\n")#line:55
43
+ O0OOOO00OOO0O0OO0 .close ()#line:56
44
+ def read_cache_file (OOO000OO0OOOOOO00 ):#line:58
45
+ OOOO00O00OO0O000O =None #line:59
46
+ with open (project_info_cache ,'r',encoding ='utf-8')as OOO00O00O00O00OOO :#line:60
47
+ O0O000OO0O0OO000O =OOO00O00O00O00OOO .readlines ()#line:61
48
+ for OO000O0OO00OO0OOO in range (0 ,len (O0O000OO0O0OO000O )):#line:62
49
+ O0O0OO000OOO00O0O =re .search (OOO000OO0OOOOOO00 ,O0O000OO0O0OO000O [OO000O0OO00OO0OOO ])#line:63
50
+ if O0O0OO000OOO00O0O !=None :#line:64
51
+ OO0O000OO00O0OO0O =O0O000OO0O0OO000O [OO000O0OO00OO0OOO ]#line:65
52
+ OO0OO00OOOO00000O =OO0O000OO00O0OO0O .split ('---')#line:66
53
+ OOOO00O00OO0O000O =tuple (OO0OO00OOOO00000O )#line:67
54
+ break #line:68
55
+ return OOOO00O00OO0O000O #line:69
56
+ def manage_job_inis ():#line:72
57
+ OO0O000OO0OOO0OO0 =os .path .exists (drrr_job_inis_dir )#line:73
58
+ if OO0O000OO0OOO0OO0 ==True :#line:74
59
+ OO0OO00OOO0OOO0O0 ="cd "+drrr_job_inis_dir +"; git pull"#line:75
60
+ O0000OOO00000OO0O =os .popen (OO0OO00OOO0OOO0O0 )#line:76
61
+ OO0O00OOO000O0000 =O0000OOO00000OO0O .read ()#line:77
62
+ OOOOO0000O0000O00 =re .search ("fatal",OO0O00OOO000O0000 )#line:78
63
+ if OOOOO0000O0000O00 !=None :#line:79
64
+ lz_error (0 )#line:80
65
+ else :#line:81
66
+ OOOO00OOO0O000O0O ="git clone "+drrr_job_inis_addr +" "+drrr_job_inis_dir #line:82
67
+ O0000OOO00000OO0O =os .popen (OOOO00OOO0O000O0O )#line:83
68
+ OO0O00OOO000O0000 =O0000OOO00000OO0O .read ()#line:84
69
+ OOOOO0000O0000O00 =re .search ("fatal",OO0O00OOO000O0000 )#line:85
70
+ if OOOOO0000O0000O00 !=None :#line:86
71
+ lz_error (0 )#line:87
72
+ def get_debug_file_path (OOOOO0OO000000O0O ):#line:90
73
+ O0OO000OOO0OOOO0O =lldb .debugger .GetCommandInterpreter ()#line:91
74
+ O00000O0O00OOO000 =lldb .SBCommandReturnObject ()#line:92
75
+ O0OO000OOO0OOOO0O .HandleCommand ('image lookup -v --address '+OOOOO0OO000000O0O ,O00000O0O00OOO000 )#line:93
76
+ OO0OOOO0OO00OO0O0 =O00000O0O00OOO000 .GetOutput ()#line:94
77
+ O0O0OOO0OOOOO0OOO =""#line:96
78
+ OO00O0000O00O00OO =re .search ('error',OO0OOOO0OO00OO0O0 )#line:97
79
+ if OO00O0000O00O00OO !=None :#line:98
80
+ return O0O0OOO0OOOOO0OOO #line:99
81
+ OOOOOOOO000OOOO00 =OO0OOOO0OO00OO0O0 .split ("\n")#line:102
82
+ if len (OOOOOOOO000OOOO00 )>3 :#line:103
83
+ OOO0OOOOO00O000O0 =OOOOOOOO000OOOO00 [3 ].strip ()#line:104
84
+ O000OO0O0O00O000O =OOO0OOOOO00O000O0 .split (",")#line:106
85
+ if len (O000OO0O0O00O000O )>1 :#line:107
86
+ OO000OOOO0OO00000 =O000OO0O0O00O000O [1 ].strip ()#line:108
87
+ O0O0OOO0O0O0OOO0O =OO000OOOO0OO00000 .split ("=")#line:110
88
+ if len (O0O0OOO0O0O0OOO0O )>1 :#line:111
89
+ O00O0O000O0OO00OO =O0O0OOO0O0O0OOO0O [1 ].strip ()#line:112
90
+ O0O0OOO0OOOOO0OOO =O00O0O000O0OO00OO .replace ('\"','')#line:114
91
+ return O0O0OOO0OOOOO0OOO #line:116
92
+ def get_inis_info (OO00000000OO0OO00 ):#line:119
93
+ O0OO00O000OOOOOO0 =None #line:121
94
+ OO0OO00O0OOO00OO0 =None #line:122
95
+ OO0O0O0OOOO00OO00 =None #line:123
96
+ O000OOO0OO00OOOO0 =None #line:124
97
+ O0OOOOOOOOOOOOOO0 =OO00000000OO0OO00 .split ("/")#line:127
98
+ for OOOO00000O000000O in range (0 ,len (O0OOOOOOOOOOOOOO0 )):#line:128
99
+ if O0OOOOOOOOOOOOOO0 [OOOO00000O000000O ]=="MODULE_DIR":#line:129
100
+ OO0OO00O0OOO00OO0 =O0OOOOOOOOOOOOOO0 [OOOO00000O000000O +1 ]#line:130
101
+ O0OO00O000OOOOOO0 =O0OOOOOOOOOOOOOO0 [OOOO00000O000000O +1 ]#line:131
102
+ break #line:132
103
+ if OO0OO00O0OOO00OO0 !=None and len (OO0OO00O0OOO00OO0 )>0 :#line:139
104
+ OOO0O0000O000OOOO =os .listdir (drrr_job_inis_dir_modules )#line:140
105
+ for OOOO00000O000000O in range (0 ,len (OOO0O0000O000OOOO )):#line:141
106
+ OOOOOO0OO0O00O00O =drrr_job_inis_dir_modules +"/"+OOO0O0000O000OOOO [OOOO00000O000000O ]#line:142
107
+ with open (OOOOOO0OO0O00O00O ,'r',encoding ='utf-8')as O0O0O0O0O000OOOOO :#line:144
108
+ O000OO0O0OO00OOOO =O0O0O0O0O000OOOOO .readlines ()#line:145
109
+ for OOOO00000O000000O in range (0 ,len (O000OO0O0OO00OOOO )):#line:146
110
+ O0O00OOO00O00O000 =re .search (OO0OO00O0OOO00OO0 ,O000OO0O0OO00OOOO [OOOO00000O000000O ])#line:147
111
+ if O0O00OOO00O00O000 !=None :#line:148
112
+ OO0O0O0OOOO00OO00 =OOO0O0000O000OOOO [OOOO00000O000000O ]#line:149
113
+ OO000OOOO00OOO000 =OOOO00000O000000O -5 if OOOO00000O000000O >5 else 0 #line:150
114
+ O0OO000OO0OOO0O0O =OOOO00000O000000O +5 if OOOO00000O000000O +5 <len (O000OO0O0OO00OOOO )else len (O000OO0O0OO00OOOO )#line:151
115
+ for OOOOOOOO0O0O000O0 in range (OO000OOOO00OOO000 ,O0OO000OO0OOO0O0O ):#line:152
116
+ OOO000000O00O00O0 =re .findall ("ssh://git@gitlab.qiyi.domain:[^/]+?/.*?"+O0OO00O000OOOOOO0 +"*?[^0~9]?.git",O000OO0O0OO00OOOO [OOOOOOOO0O0O000O0 ])#line:153
117
+ if len (OOO000000O00O00O0 )>0 :#line:154
118
+ O000OOO0OO00OOOO0 =OOO000000O00O00O0 [0 ]#line:155
119
+ break #line:156
120
+ if O000OOO0OO00OOOO0 !=None :#line:157
121
+ break #line:158
122
+ if O000OOO0OO00OOOO0 !=None :#line:159
123
+ break #line:160
124
+ return (O0OO00O000OOOOOO0 ,O000OOO0OO00OOOO0 )#line:179
125
+ def download_git_source_code (O0OOO0OOO0O000OOO ,OO0000O0O0O0O0O00 ):#line:183
126
+ O00OOOO0O0OO0O0O0 =source_code_dir +"/"+O0OOO0OOO0O000OOO #line:184
127
+ O0000OOOOOO00000O =os .path .exists (O00OOOO0O0OO0O0O0 )#line:185
128
+ if not O0000OOOOOO00000O :#line:187
129
+ os .makedirs (O00OOOO0O0OO0O0O0 )#line:188
130
+ OOOOOO0OO0OOOOOO0 ="git clone "+OO0000O0O0O0O0O00 +" "+O00OOOO0O0OO0O0O0 #line:189
131
+ O0OOOOOOOO0000O00 =os .popen (OOOOOO0OO0OOOOOO0 )#line:190
132
+ O00OO00OO0OOOO0O0 =O0OOOOOOOO0000O00 .read ()#line:191
133
+ O00O0OO00000OOO0O =re .search ("fatal",O00OO00OO0OOOO0O0 )#line:192
134
+ if O00O0OO00000OOO0O !=None :#line:193
135
+ return ""#line:194
136
+ else :#line:195
137
+ OO0O0O00O0OOO00OO ="cd "+O00OOOO0O0OO0O0O0 +"; git pull"#line:196
138
+ O0OOOOOOOO0000O00 =os .popen (OO0O0O00O0OOO00OO )#line:197
139
+ O00OO00OO0OOOO0O0 =O0OOOOOOOO0000O00 .read ()#line:198
140
+ O00O0OO00000OOO0O =re .search ("fatal",O00OO00OO0OOOO0O0 )#line:199
141
+ if O00O0OO00000OOO0O !=None :#line:200
142
+ return ""#line:201
143
+ return O00OOOO0O0OO0O0O0 #line:203
144
+ def get_update_time ():#line:206
145
+ OOO00OOO0OOOO00O0 =user_dir +"/.cocoapods/repos/qiyi-podspecs/"#line:208
146
+ OOO000OOOOO0OO0O0 =os .path .getmtime (OOO00OOO0OOOO00O0 )#line:209
147
+ OO00O0OO0000OO000 =time .localtime (OOO000OOOOO0OO0O0 )#line:210
148
+ OO0OOOO0O00OOOO00 =time .strftime ("%m %d %H:%M:%S %Y",OO00O0OO0000OO000 )#line:213
149
+ OOO0O000OO00OO000 =OO0OOOO0O00OOOO00 .split (" ")#line:214
150
+ OO00O000O0O00OO0O =OOO0O000OO00OO000 [0 ]#line:215
151
+ if OO00O000O0O00OO0O =='1':#line:217
152
+ OO00O000O0O00OO0O ='Jan'#line:218
153
+ if OO00O000O0O00OO0O =='2':#line:219
154
+ OO00O000O0O00OO0O ='Feb'#line:220
155
+ if OO00O000O0O00OO0O =='3':#line:221
156
+ OO00O000O0O00OO0O ='Mar'#line:222
157
+ if OO00O000O0O00OO0O =='4':#line:223
158
+ OO00O000O0O00OO0O ='Apr'#line:224
159
+ if OO00O000O0O00OO0O =='5':#line:225
160
+ OO00O000O0O00OO0O ='May'#line:226
161
+ if OO00O000O0O00OO0O =='6':#line:227
162
+ OO00O000O0O00OO0O ='Jun'#line:228
163
+ if OO00O000O0O00OO0O =='7':#line:229
164
+ OO00O000O0O00OO0O ='Jul'#line:230
165
+ if OO00O000O0O00OO0O =='8':#line:231
166
+ OO00O000O0O00OO0O ='Aug'#line:232
167
+ if OO00O000O0O00OO0O =='9':#line:233
168
+ OO00O000O0O00OO0O ='Sep'#line:234
169
+ if OO00O000O0O00OO0O =='10':#line:235
170
+ OO00O000O0O00OO0O ='Oct'#line:236
171
+ if OO00O000O0O00OO0O =='11':#line:237
172
+ OO00O000O0O00OO0O ='Nov'#line:238
173
+ if OO00O000O0O00OO0O =='12':#line:239
174
+ OO00O000O0O00OO0O ='Dec'#line:240
175
+ OOO0O000OO00OO000 [0 ]=OO00O000O0O00OO0O #line:242
176
+ return ' '.join (OOO0O000OO00OO000 )#line:244
177
+ def change_source_code_commit (OO00OOOOO0OO0OOO0 ):#line:247
178
+ OOO0O0OOOO0O00OO0 =get_update_time ()#line:250
179
+ OOO00OOO0000OO000 ="cd "+OO00OOOOO0OO0OOO0 +"; git rev-list -n 1 --before=\""+OOO0O0OOOO0O00OO0 +"\" master"#line:252
180
+ OOO00O00OO0000O0O =os .popen (OOO00OOO0000OO000 )#line:253
181
+ OO000OOOO00OO0O0O =OOO00O00OO0000O0O .read ()#line:254
182
+ OO0OO0O00OO0OOOOO =re .search ("fatal",OO000OOOO00OO0O0O )#line:255
183
+ if OO0OO0O00OO0OOOOO !=None :#line:256
184
+ return False #line:257
185
+ else :#line:258
186
+ return True #line:259
187
+ def checkError (O000000O0OOO0OO00 ,O0O000O00000O000O ):#line:261
188
+ OOO0000OOOO0OOO00 =re .search (O0O000O00000O000O ,O000000O0OOO0OO00 )#line:262
189
+ if OOO0000OOOO0OOO00 ==None :#line:263
190
+ return True #line:264
191
+ else :#line:265
192
+ return False #line:266
193
+ def map_source_code (OOOOOOO0O0O0O0000 ,O00000O00OOO0OO0O ,OOOOO0O00OO0O000O ):#line:269
194
+ O00O00O0O00OOO00O =O00000O00OOO0OO0O .split (OOOOO0O00OO0O000O )#line:270
195
+ OOOO00OOO00OO000O =O00O00O0O00OOO00O [0 ]#line:271
196
+ OOO000O0OOOOO0O0O =lldb .debugger .GetCommandInterpreter ()#line:272
197
+ O00O0O0OOOO00OOOO =lldb .SBCommandReturnObject ()#line:273
198
+ OOO000O0OOOOO0O0O .HandleCommand ("settings append target.source-map "+OOOO00OOO00OO000O +" "+OOOOOOO0O0O0O0000 ,O00O0O0OOOO00OOOO )#line:274
199
+ O00O0OOO0OOOO0OO0 =O00O0O0OOOO00OOOO .GetOutput ()#line:275
200
+ OO0O000O0OOO0OOOO =re .search ('error',O00O0OOO0OOOO0OO0 )#line:276
201
+ if OO0O000O0OOO0OOOO ==None :#line:277
202
+ return True #line:278
203
+ else :#line:279
204
+ return False #line:280
205
+ def thread_step_inst (O0OOO0OO00OO000O0 ):#line:283
206
+ pass #line:284
207
+ def adjustStackFrame (O0O0O0O00000OOO0O ):#line:287
208
+ O0O0O0O00000OOO0O .SetAsync (True )#line:298
209
+ OOOO00OOOO0O00OOO =O0O0O0O00000OOO0O .GetSelectedTarget ().GetProcess ().GetSelectedThread ()#line:303
210
+ O0OOOO0O000OOO000 =OOOO00OOOO0O00OOO .GetSelectedFrame ().GetFrameID ()#line:304
211
+ O00O0000OOOO0OOO0 =lldb .debugger .GetCommandInterpreter ()#line:306
212
+ O0OOOOOO00O00O0O0 =lldb .SBCommandReturnObject ()#line:307
213
+ O00O0000OOOO0OOO0 .HandleCommand ("thread step-inst",O0OOOOOO00O00O0O0 )#line:311
214
+ OO0O00OO0000O0OOO =O0OOOOOO00O00O0O0 .GetOutput ()#line:312
215
+ O0OO000O0O0O0000O =re .search ('error',OO0O00OO0000O0OOO )#line:313
216
+ if O0OO000O0O0O0000O !=None :#line:314
217
+ return False #line:315
218
+ time .sleep (0.2 )#line:316
219
+ O00O0000OOOO0OOO0 .HandleCommand ("thread step-over",O0OOOOOO00O00O0O0 )#line:317
220
+ time .sleep (0.5 )#line:318
221
+ O00O0000OOOO0OOO0 .HandleCommand ("frame select "+str (O0OOOO0O000OOO000 ),O0OOOOOO00O00O0O0 )#line:327
222
+ OO0O00OO0000O0OOO =O0OOOOOO00O00O0O0 .GetOutput ()#line:328
223
+ O0OO000O0O0O0000O =re .search ('error',OO0O00OO0000O0OOO )#line:329
224
+ if O0OO000O0O0O0000O !=None :#line:331
225
+ return False #line:332
226
+ def clean (O00O0O00OOOO00O00 ):#line:334
227
+ O0OOO0O0O000OO0O0 =os .listdir (O00O0O00OOOO00O00 )#line:335
228
+ for O000O0OO0OO00OO0O in O0OOO0O0O000OO0O0 :#line:336
229
+ OOOO0000OO0OOO00O =os .path .join (O00O0O00OOOO00O00 ,O000O0OO0OO00OO0O )#line:337
230
+ if os .path .isfile (OOOO0000OO0OOO00O ):#line:338
231
+ os .remove (OOOO0000OO0OOO00O )#line:339
232
+ elif os .path .isdir (OOOO0000OO0OOO00O ):#line:340
233
+ shutil .rmtree (OOOO0000OO0OOO00O )#line:341
234
+ pass #line:342
235
+ def processing (O00O0000OO0OO0000 ):#line:352
236
+ sys .stdout .write (O00O0000OO0OO0000 )#line:353
237
+ sys .stdout .flush ()#line:354
238
+ def start (O0000O0OO0OO00O00 ,OO000O00OOOO0O0O0 ):#line:356
239
+ processing ("processing")#line:358
240
+ processing (".")#line:361
241
+ lz_log (1 )#line:364
242
+ OOOO0000O0OOOO0OO =get_debug_file_path (OO000O00OOOO0O0O0 )#line:365
243
+ lz_log (OOOO0000O0OOOO0OO )#line:366
244
+ if OOOO0000O0OOOO0OO ==None or len (OOOO0000O0OOOO0OO )==0 :#line:367
245
+ lz_error (1 )#line:368
246
+ return #line:369
247
+ processing (".")#line:374
248
+ lz_log (2 )#line:375
249
+ OO0OOOOOO0O000OO0 =get_inis_info (OOOO0000O0OOOO0OO )#line:376
250
+ lz_log (OO0OOOOOO0O000OO0 )#line:377
251
+ if OO0OOOOOO0O000OO0 [0 ]==None or OO0OOOOOO0O000OO0 [1 ]==None :#line:378
252
+ lz_error (2 )#line:379
253
+ return #line:380
254
+ processing (".")#line:384
255
+ lz_log (3 )#line:385
256
+ OOOOO0O0OO0OOOO00 =download_git_source_code (OO0OOOOOO0O000OO0 [0 ],OO0OOOOOO0O000OO0 [1 ])#line:386
257
+ lz_log (OOOOO0O0OO0OOOO00 )#line:387
258
+ if OOOOO0O0OO0OOOO00 ==None or len (OOOOO0O0OO0OOOO00 )==0 :#line:388
259
+ lz_error (3 )#line:389
260
+ return #line:390
261
+ processing (".")#line:394
262
+ lz_log (4 )#line:395
263
+ O00O00O0OOOOOOOOO =change_source_code_commit (OOOOO0O0OO0OOOO00 )#line:396
264
+ lz_log (O00O00O0OOOOOOOOO )#line:397
265
+ if O00O00O0OOOOOOOOO ==False :#line:398
266
+ lz_error (4 )#line:399
267
+ return #line:400
268
+ processing (".")#line:404
269
+ lz_log (5 )#line:405
270
+ O00O00O0OOOOOOOOO =map_source_code (OOOOO0O0OO0OOOO00 ,OOOO0000O0OOOO0OO ,OO0OOOOOO0O000OO0 [0 ])#line:406
271
+ lz_log (O00O00O0OOOOOOOOO )#line:407
272
+ if O00O00O0OOOOOOOOO ==False :#line:408
273
+ lz_error (5 )#line:409
274
+ return #line:410
275
+ print (".")#line:414
276
+ lz_log (6 )#line:415
277
+ O00O00O0OOOOOOOOO =adjustStackFrame (O0000O0OO0OO00O00 )#line:416
278
+ lz_log (O00O00O0OOOOOOOOO )#line:417
279
+ if O00O00O0OOOOOOOOO ==False :#line:418
280
+ lz_error (6 )#line:419
281
+ return #line:420
282
+ def process (OOO00O00OOO0000O0 ,OO0OOOO0OOO00OO00 ):#line:423
283
+ O0000OOO0OO000O0O =r'''
284
+ @import <dlfcn.h>;
285
+ @import <objc/runtime.h>;
286
+ @import Foundation;
287
+ unsigned int count;
288
+ const char **classes;
289
+ Dl_info info;
290
+
291
+ void *_mh_execute_header = __builtin_return_address(0);
292
+ dladdr(_mh_execute_header, &info);
293
+ classes = (const char **)objc_copyClassNamesForImage(info.dli_fname, &count);
301
294
 
295
+ NSInteger level = 0;//继承层级
296
+ NSInteger backLevel = 0;//继承层级
297
+ NSMutableDictionary * visited_class = [[NSMutableDictionary alloc]init];
298
+ NSMutableArray * class_stack = [[NSMutableArray alloc] init];
299
+ [class_stack addObject:@"'''+OO0OOOO0OOO00OO00 +'''"];
300
+ BOOL isPrint = NO;
301
+ printf("\\n");
302
+ while (true) {
303
+
304
+ NSString * current_class = [class_stack firstObject];
305
+
306
+ if (current_class) {
307
+ if((BOOL)[[visited_class objectForKey:current_class] boolValue] == YES ) {
308
+
309
+ BOOL hasNewClass = NO;
310
+ for (int i = 0; i < count; i++) {
311
+
312
+ NSString *className = [NSString stringWithCString:classes[i] encoding:NSUTF8StringEncoding];
313
+ NSString *superName = (NSString*)NSStringFromClass((Class)class_getSuperclass(NSClassFromString(className)));
314
+
315
+ if ([superName isEqualToString:current_class] && (BOOL)[[visited_class objectForKey:className] boolValue] == NO) {
316
+ [class_stack insertObject:className atIndex:0];
317
+ hasNewClass = YES;
318
+ break;
319
+ }
320
+ }
321
+ if (hasNewClass == YES) {
322
+ level += 1;
323
+ } else {
324
+ [class_stack removeObjectAtIndex:0];
325
+ level -= 1;
326
+ backLevel += 1;
327
+ }
328
+
329
+ } else {
330
+
331
+ NSMutableString * separationSpace = [[NSMutableString alloc]init];
332
+ for (int i = 0; i < level; ++i) {
333
+ [separationSpace appendString:@" |"];
334
+ }
335
+
336
+ NSMutableString * backLevelSpace = [[NSMutableString alloc]init];
337
+ for (int i = 0; i < backLevel-1; ++i) {
338
+ [backLevelSpace appendString:@" |"];
339
+ }
340
+
341
+ backLevel = 0;
342
+
343
+ if (isPrint == YES) {
344
+ printf("|%s%s\\n",(char *)[[separationSpace copy] UTF8String],(char *)[[backLevelSpace copy] UTF8String]);
345
+ }
346
+ NSString * temp = (NSString*)NSStringFromClass((Class)class_getSuperclass(NSClassFromString(current_class)));
347
+ if (temp.length > 0) {
348
+ printf("|%s----%s : %s (L%s) \\n",(char *)[[separationSpace copy] UTF8String],(char *)[current_class UTF8String],(char *)[temp UTF8String],(char *)[[NSString stringWithFormat:@"%ld",(long)level] UTF8String]);
349
+ } else {
350
+ printf("|----%s (L%s) \\n",(char *)[current_class UTF8String],(char *)[[NSString stringWithFormat:@"%ld",(long)level] UTF8String]);
351
+ }
352
+
353
+ isPrint = YES;
354
+ [visited_class setObject:@1 forKey:current_class];
355
+ }
356
+ } else {
357
+ break;
358
+ }
359
+ }
360
+ '''#line:501
361
+ O00OOOOO00OO00OO0 =OOO00O00OOO0000O0 .GetCommandInterpreter ()#line:503
362
+ O000OOOOOO00O000O =lldb .SBCommandReturnObject ()#line:504
363
+ O00OOOOO00OO00OO0 .HandleCommand ('expression -lobjc -O -- '+O0000OOO0OO000O0O ,O000OOOOOO00O000O )#line:506
364
+ OOOOOOO0000O0000O =O000OOOOOO00O000O .GetOutput ()#line:507
365
+ O0O00O0OO0O0000OO =re .search ('error',OOOOOOO0000O0000O )#line:508
366
+ print (O000OOOOOO00O000O .GetError ())#line:509
367
+ def help ():#line:511
368
+ print ("Usage:")#line:513
369
+ print (" isource memory_address eg:isource 0x8badf00d")#line:514
370
+ print ("")#line:515
371
+ print (" isource class_name eg:isource QYVideoViewControllerV3")#line:516
372
+ print ("")#line:517
373
+ print ("Commands:")#line:519
374
+ print (" + help command help")#line:520
375
+ print (" + clean clean cache")#line:521
376
+ pass #line:522
377
+ def helloworld (O00OOO0OO00OO00OO ,OOOOOOO0OO000O000 ,O000O0O0OO0O00O00 ,OOO0O0O0OO00O0OO0 ):#line:525
378
+ if OOOOOOO0OO000O000 ==''or OOOOOOO0OO000O000 =='-h':#line:527
379
+ help ()#line:528
380
+ elif OOOOOOO0OO000O000 =='-c':#line:529
381
+ clean (source_code_dir )#line:530
382
+ elif re .match ('0x.*[a-z0-9]',OOOOOOO0OO000O000 )!=None :#line:531
383
+ start (O00OOO0OO00OO00OO ,OOOOOOO0OO000O000 )#line:532
384
+ elif re .match ('.*[a-z0-9]',OOOOOOO0OO000O000 )!=None :#line:533
385
+ process (O00OOO0OO00OO00OO ,OOOOOOO0OO000O000 )#line:534
386
+ else :#line:535
387
+ print ('error: '+OOOOOOO0OO000O000 +' is not a valid command.')#line:536
388
+ help ()#line:537
389
+ def __O0OO000OO0O00O0OO (O000OOOO0O0OO0O00 ,OOOOO00OO00OOOO00 ):#line:540
390
+ manage_source_dir ()#line:542
391
+ manage_job_inis ()#line:546
392
+ O000OOOO0O0OO0O00 .HandleCommand ("command script add -f isource_lldb.helloworld isource")#line:548
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isource_lldb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.9
4
+ version: 0.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - ningyuan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-04 00:00:00.000000000 Z
11
+ date: 2021-06-30 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: An plugin of LLDB.
14
14
  email: