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 ...
随机推荐
- MyBatis的映射关系
MyBatis的映射关系是有一个默认的,采用下划线命名的方式将数据库表的列名按照驼峰式映射成 Java 实体类的属性名 举个例子数据库表名为 tb_user,其中的字段名为 inst_code,对应的 ...
- OpenHarmony父子组件单项同步使用:@Prop装饰器
@Prop装饰的变量可以和父组件建立单向的同步关系.@Prop装饰的变量是可变的,但是变化不会同步回其父组件. 说明: 从API version 9开始,该装饰器支持在ArkTS卡片中使用. 概述 ...
- 使用 OpenCV 进行文档矫正
使用 OpenCV 进行文档矫正 本文只发布于博客园与pchar博客 std::vector<std::vector<cv::Point>> cvhelper::findCor ...
- Seaborn分布数据可视化---统计分布图
统计分布图 barplot() sns.barplot( x=None, y=None, hue=None, data=None, order=None, hue_order=None, estima ...
- 最新CAMX-python融合技术应用与大气污染来源解析方法
大气污染问题既是局部.当地的,也是区域的,甚至是全球的.本地的污染物排放除了对当地造成严重影响外,同时还会在动力输送作用下,极大地影响下风向地区的大气环境状况.数值模式模拟是分析大气污染物时空分布和成 ...
- 使用OpenMMLab系列的开源库时,常用的脚本合集。
使用OpenMMLab系列的开源库时,常用的脚本合集. 开源仓库:gy-7/mmlab_scripts 脚本解释: anchor_visiual.py 生成的锚框可视化 aug_test.py 自动数 ...
- 力扣344(java & python)-反转字符串(简单)
题目: 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这一问题. 示例 1 ...
- 力扣524(java)-通过删除字母匹配到字典里最长单词(中等)
题目: 给你一个字符串 s 和一个字符串数组 dictionary ,找出并返回 dictionary 中最长的字符串,该字符串可以通过删除 s 中的某些字符得到. 如果答案不止一个,返回长度最长且字 ...
- 史上最强《Java 开发手册》泰山版王者归来!
阿里妹导读:潜力修炼一年之久的<Java 开发手册(泰山版)>今天发布!此次共计新增 34 条规约,修改描述 90 处,其中错误码规则更是第一次提出完整的解决方案,大家参考错误码示例表,欢 ...
- MaxCompute管家详解--管家助力,轻松玩转MaxCompute
精彩视频回顾请点击:MaxCompute管家详解以下是直播内容精华整理,主要包括以下四个方面:1.背景速览:2.功能介绍:3.案例讲解:4.新功能预告. 一.背景速览 MaxCompute(原ODPS ...