Xcode多进程调试:WKWebView
由于WKWebView使用的是多线程架构,渲染模块和网络模块都各自在一个单独的进程里面,因此,如果需要设置渲染模块或者网络模块里面的断点,需要做一些特殊处理。
举个例子,假设在Xcode里面设置了渲染模块里面一个函数的符号断点:
如果像平时一样,运行工程期待断点生效是不可能的。这是因为默认情况下,这个断点是在主进程,例子里面是TestWKServer进程,而主进程是没有上面的RenderElement函数的,因此不会触发断点。
正确的操作是要将WKWebView的渲染进程和网络进程Attach到Xcode里面。方法就是选择Xcode的Debug菜单,然后选择Attach to Process by PID or Name...或者Attach to Process。
选择Attach to Process by PID or Name...需要填入进程的PID或者进程的名字,对于WKWebView的渲染进程和网络进程来说,它们的名字分别是com.apple.WebKit.WebContent、com.apple.WebKit.Networking。
选择Attach to Process会展开所有的进程列表,选择需要Attach的进程就行。
那么,这两种有什么差别呢?
由于Attach to Process需要被Attach的进程已经创建才行,但是我们有时候可能等进程被创建完毕才去Attach就会错过断点执行的时机,这时候Attach to Process by PID or Name...就会显得很有用了。Attach to Process by PID or Name...在被Attach的进程还未创建时,就告诉Xcode:"我需要Attach这些进程,请在它们创建之后就立即Attach进来",这样就不会错过任何断点时机了。
但是需要注意的是,由于你在调试的时候,可能开着诸如Safari一类的程序,由于Safari使用WKWebView,也会有渲染进程和网络进程,当你通过Attach to Process by PID or Name...设置了需要Attach的进程名字,然后启动你的工程,会发现Xcode确实Attach了渲染进程和网络进程,但是Attach的确是Safari的而不是你自己的(因为Safari的渲染进程和网络进程先于你的创建),这时候断点也不会生效。
有两种办法解决上述问题:
1)退出Safari之类使用WKWebView的程序,确保除了自己的工程之外,不会有其他程序已经创建了WKWebView的渲染进程和网络进程。确认的方式是使用Attach to Process提供的进程列表,确认里面没有com.apple.WebKit.WebContent com.apple.WebKit.Networking进程;
2)使用Attach to Process,但是需要确保我们Attach的时候,程序还未执行我们想要断点的函数。一个比较有用的方法是先在WKNavigationDelegate的- webView:decidePolicyForNavigationAction:preferences:decisionHandler:
实现函数里面设置一个断点,当断到这个函数时,渲染进程和网络进程已经创建,并且这两个进程也还刚刚开始运行,一般来说,我们也来得及设置后续我们需要设置的断点。这个时候就可以使用Attach to Process去Attach我们自己的渲染进程和网络进程,一个好用的规律是我们自己的渲染进程和网络进程是主进程的子进程,它们的PID非常相似(或者说相近),如果实在不确定哪个进程是我们自己的,就将列表里面所有的com.apple.WebKit.WebContent、com.apple.WebKit.Networking进程Attach进来,只是这样比较繁琐。
Xcode多进程调试:WKWebView的更多相关文章
- Xcode 7 调试野指针利器 Address sanitizer
Xcode 7 调试野指针利器 Address sanitizer 什么是Address Sanitizer? AddressSanitizer is a fast memory error dete ...
- xcode的调试技巧
转自:http://www.cnblogs.com/daiweilai/p/4421340.html#biyouji 目录 前言逼优鸡知己知彼 百战不殆抽刀断Bug 普通操作 全局断点(Global ...
- Xcode视图调试
视图调试 使用视图调试器检查您的视图层次结构,可以轻松地判断视图位置.大小以及实现问题. 在XCode中运行你的应用程序,在调试栏上点击“调试视图层次”按钮,进入视图调试器. XCode停止你的应用程 ...
- 如何使用Xcode分析调试在真机运行的UE4 IOS版游戏
写本文的是因为UE4 官方文档虽然也有,但主要讲的是是用UE4Editor把游戏打成一个IPA包的形式发布的方法 而对于想通过Xcode分析UE4的渲染流程来学习或优化的朋友,那官方文档的资料还是不够 ...
- GDB多进程调试(转)
http://www.cnblogs.com/ggjucheng/archive/2011/12/15/2288710.html GDB 是 linux 系统上常用的 c/c++ 调试工具,功能十分强 ...
- GDB 多进程调试
启动: $gdb <file> || $gdb 然后(gdb)file <file> 运行: (gdb)run <该程序本身的命令行参数> 查看代码: (gdb) ...
- xcode单步调试快捷键
xcode单步调试快捷键f6,但是磨人f6是用来调节键盘亮度的,在系统偏好,键盘设置里面,做如下设置就可以了.
- iOS开发之Xcode常用调试技巧总结
转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...
- 使用Xcode进行调试
目录 知己知彼 百战不殆抽刀断Bug 普通操作 全局断点(Global BreakPoint) 条件断点(Condational Breakpoints)打印的艺术 NSLog 开启僵尸对象(Enab ...
- 2019-10-11-VisualStudio-配置多进程调试快捷键启动项目
title author date CreateTime categories VisualStudio 配置多进程调试快捷键启动项目 lindexi 2019-10-11 15:33:32 +080 ...
随机推荐
- KingbaseES V8R6集群运维案例之---sys_rewind应用分析
案例说明: sys_rewind是用于在数据库cluster的时间线分叉以后,同步一个 KingbaseES 数据库cluster 和同一数据库cluster另一份拷贝的工具.一种典型的场景是在失 ...
- MySQL和Oracle里面SQL转换
oracle环境有关sql的注意事项 比较特殊的: 1. 原有 MySQL字段设置为 not null default '' 原因: ORACLE 数据库 不允许存空字符串, 认为它跟null是一样的 ...
- Go 实战|使用 Wails 构建轻量级的桌面应用:仿微信登录界面 Demo
概述 本文探讨 Wails 框架的使用,从搭建环境到开发,再到最终的构建打包,本项目源码 GitHub 地址:https://github.com/mazeyqian/go-run-wechat-de ...
- Avalonia的模板控件(Templated Controls)
在Avalonia的UI框架中,TemplatedControl是一个核心组件,它提供了一种强大的方式来创建可重用且高度可定制的控件. 本文将深入探讨TemplatedControl的概念.其带来的优 ...
- 51nod 1268
51nod 1268 基础dfs 题目如下: 给出 N 个正整数组成的数组 A,求能否从中选出若干个,使他们的和 为 K.如果可以,输出:"Yes",否则输出"No&qu ...
- redis哨兵主备切换的数据丢失问题:异步复制、集群脑裂
1.两种数据丢失的情况 主备切换的过程,可能会导致数据丢失 (1)异步复制导致的数据丢失 因为master -> slave的复制是异步的,所以可能有部分数据还没复制到slave,master就 ...
- 不常用的技能-【手动编译java类】
jdk版本:1.7 冒号分割jar包,1.8 分号分割jar包 javac -classpath fastjson-1.2.24.jar:jedis-2.9.0.jar Test.javajava - ...
- WIN11 安装 SQL Server 2019,SQLSERVER2022, MYSQL 8.0 ,Docker,Mongodb失败故障分析
最近研究数据库性能调优遇到各种数据库各种装不上,不知道熬了多少根软白沙,熬了多少颗张三疯,问了多少AI,查了多少网页,熬了两天,终于搞明白了一件事:那就是WIN11 ON ARM (因为拿的是MAC ...
- 【ESP32 IDF】用RMT控制 WS2812 彩色灯带
在上一篇中,老周用 .NET Nano Framework 给大伙伴们演示了 WS2812 灯带的控制,包括用 SPI 和 红外RMT 的方式.利用 RMT 是一个很机灵的方案,不过,可能很多大伙伴对 ...
- 力扣550(MySQL)-游戏玩法分析Ⅳ(中等)
题目: 需求:编写一个 SQL 查询,报告在首次登录的第二天再次登录的玩家的分数,四舍五入到小数点后两位.换句话说,您需要计算从首次登录日期开始至少连续两天登录的玩家的数量,然后除以玩家总数. 查询结 ...