加载中…
个人资料
怪盗基德
怪盗基德
  • 博客等级:
  • 博客积分:0
  • 博客访问:75,969
  • 关注人气:9
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

苹果脚本控制XCODE自动Attach同名子进程

(2019-09-20 17:39:46)
标签:

lldb

applescript

attach

shell

ps

分类: 计算机与 Internet
  XCode有个Wait For Attach进程名的功能,但是当进程X又启动一个新的X子进程时,它不能工作,它只会Attach到第一个X进程,然后再用这个功能第二次就不工作了。
  因此想用苹果脚本去检测进程,一旦发现新的X子进程,得到进程号,再通过XCode的Attach到进程号功能来完成。
  说干就干,本来想在shell里做功能,最后调用苹果脚本,后来发现shell真的不好操作,苹果脚本就方便多了,直接可以控制shell运行,得结果。
  先第一次扫进程得到已经存在的进程,忽略掉!然后如果发现新进程,则Attach.

on run argv

set AppName to ""

if length of argv is equal to 1 then

set AppName to item 1 of argv

else

set dialogResult to display dialog "Enter: Process Name" default answer "Fusion360" buttons {"Cancel", "OK"} default button 2

set AppName to get the text returned of dialogResult

end if

if length of AppName is equal to 0 then

log "Not a valid Process Name!"

return

end if

end run

  老样子,判断有没有参数,有参数就用,没有提示用户输入,还是没有,报错!
  接下来是最关键的shell扫进程。

on getProcessList(AppName)

set RunningProcessesNow to do shell script "ps aux | grep " & AppName & ".app/Contents/MacOS/" & AppName & " | sed 's/.*grep.*//g' | sed 's/[ ][ ]*/ /g' | cut -d ' ' -f2"

set RunningProcessesNowList to every word in RunningProcessesNow

return RunningProcessesNowList

end getProcessList

   ps aux | grep appName.app/Contents/MacOS/appName.app 这个支持app,还不支持简单的shell,这样能严格match,否则会有太多杂的进程被选进。同时grep进程也会进入,用sed 's/.*grep.*//g' 去掉。
   输出中间会有多个空格,用sed 's/[ ][ ]*/ /g'去掉。最后cut -d ' ' -f2"得到进程号。

set RunningProcessesNowList to getProcessList(AppName)

# if length of RunningProcessesNowList > length of RunningProcessesBeforeAttachList then

repeat with ProcessId in RunningProcessesNowList

if RunningProcessesBeforeAttachList does not contain ProcessId then

log "Find new process with process id: " & ProcessId

attachToXCode(ProcessId)

return

end if

end repeat

   这里判断有没有新进程。这个就很方便了,从shell返回的list直接就能遍历。

   剩下的工作就是XCode了。

on attachToXCode(ProcessId)

tell application "Xcode"

activate

end tell

tell application "System Events"

tell application process "Xcode"

tell menu item "Attach to Process by PID or Name…" of menu "Debug" of menu bar item "Debug" of menu bar 1

click

end tell

repeat until static text 1 of text field 1 of sheet 1 of window 1 exists

end repeat

tell static text 1 of text field 1 of sheet 1 of window 1

click

keystroke ProcessId

# commit text change

key code 36

# click Attach

key code 36

end tell

end tell

end tell

end attachToXCode

    先激活XCode,然后点那个menubar,等待sheet出现。本以为XCode会简单点,谁想也不是对苹果脚本支持很好,于是也只能用click key stroke来输入值。再有就是key code 36就是按回车两次,第一次确定输入内容,第二次按Attach按钮。

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有