1. 查找要断点类中所有方法

po [RTCPeerConnection _shortMethodDescription]

(lldb) po [RTCPeerConnection _shortMethodDescription]
<RTCPeerConnection: 0x101b070f0>:
in RTCPeerConnection:Class Methods:+ (int) nativeStatsOutputLevelForLevel:(long)arg1; (0x1013daba0)+ (long) signalingStateForNativeState:(int)arg1; (0x1013daaac)+ (long) iceConnectionStateForNativeState:(int)arg1; (0x1013dab10)+ (long) connectionStateForNativeState:(int)arg1; (0x1013daad8)+ (long) iceGatheringStateForNativeState:(int)arg1; (0x1013dab5c)+ (int) nativeSignalingStateForState:(long)arg1; (0x1013daaa8)+ (id) stringForSignalingState:(long)arg1; (0x1013daab0)+ (int) nativeConnectionStateForState:(long)arg1; (0x1013daad4)+ (id) stringForConnectionState:(long)arg1; (0x1013daadc)+ (int) nativeIceConnectionStateForState:(long)arg1; (0x1013dab00)+ (id) stringForIceConnectionState:(long)arg1; (0x1013dab20)+ (int) nativeIceGatheringStateForState:(long)arg1; (0x1013dab44)+ (id) stringForIceGatheringState:(long)arg1; (0x1013dab74)Properties:@property (readonly, nonatomic) RTCPeerConnectionFactory* factory;  (@synthesize factory = _factory;)@property (readonly, nonatomic) struct scoped_refptr<webrtc::PeerConnectionInterface> nativePeerConnection;@property (weak, nonatomic) <RTCPeerConnectionDelegate>* delegate;  (@synthesize delegate = _delegate;)@property (readonly, nonatomic) NSArray* localStreams;@property (readonly, nonatomic) RTCSessionDescription* localDescription;@property (readonly, nonatomic) RTCSessionDescription* remoteDescription;@property (readonly, nonatomic) long signalingState;@property (readonly, nonatomic) long iceConnectionState;@property (readonly, nonatomic) long connectionState;@property (readonly, nonatomic) long iceGatheringState;@property (readonly, copy, nonatomic) RTCConfiguration* configuration;@property (readonly, nonatomic) NSArray* senders;@property (readonly, nonatomic) NSArray* receivers;@property (readonly, nonatomic) NSArray* transceivers;Instance Methods:- (void) statisticsWithCompletionHandler:(^block)arg1; (0x1013d6f44)- (void) statisticsForSender:(id)arg1 completionHandler:(^block)arg2; (0x1013d6cec)- (void) statisticsForReceiver:(id)arg1 completionHandler:(^block)arg2; (0x1013d6e18)- (void) statsForTrack:(id)arg1 statsOutputLevel:(long)arg2 completionHandler:(^block)arg3; (0x1013d7028)- (id) dataChannelForLabel:(id)arg1 configuration:(id)arg2; (0x1013d6ab0)- (void) setLocalDescription:(id)arg1 completionHandler:(^block)arg2; (0x1013d9f10)- (void) answerForConstraints:(id)arg1 completionHandler:(^block)arg2; (0x1013d9e34)- (void) offerForConstraints:(id)arg1 completionHandler:(^block)arg2; (0x1013d9d58)- (void) setRemoteDescription:(id)arg1 completionHandler:(^block)arg2; (0x1013da118)- (void) addIceCandidate:(id)arg1 completionHandler:(^block)arg2; (0x1013d8f08)- (void) removeIceCandidates:(id)arg1; (0x1013d9048)- (id) transceivers; (0x1013da990)- (id) addTrack:(id)arg1 streamIds:(id)arg2; (0x1013d9428)- (struct scoped_refptr<webrtc::PeerConnectionInterface>) nativePeerConnection; (0x1013dabac)- (id) initWithDependencies:(id)arg1 configuration:(id)arg2 constraints:(id)arg3 dependencies:(struct unique_ptr<webrtc::PeerConnectionDependencies, std::default_delete<webrtc::PeerConnectionDependencies>>)arg4 delegate:(id)arg5; (0x1013d8788)- (id) addTransceiverWithTrack:(id)arg1 init:(id)arg2; (0x1013d98d4)- (id) addTransceiverOfType:(long)arg1 init:(id)arg2; (0x1013d9b3c)- (id) localStreams; (0x1013d8aa8)- (id) remoteDescription; (0x1013d8bc8)- (long) signalingState; (0x1013d8c64)- (long) iceConnectionState; (0x1013d8ca4)- (long) iceGatheringState; (0x1013d8d24)- (void) addIceCandidate:(id)arg1; (0x1013d8e98)- (void) removeStream:(id)arg1; (0x1013d9388)- (id) addTransceiverWithTrack:(id)arg1; (0x1013d984c)- (id) addTransceiverOfType:(long)arg1; (0x1013d9ac8)- (void) restartIce; (0x1013d9d48)- (void) setLocalDescriptionWithCompletionHandler:(^block)arg1; (0x1013da04c)- (BOOL) setBweMinBitrateBps:(id)arg1 currentBitrateBps:(id)arg2 maxBitrateBps:(id)arg3; (0x1013da200)- (BOOL) startRtcEventLogWithFilePath:(id)arg1 maxSizeInBytes:(long)arg2; (0x1013da330)- (void) stopRtcEventLog; (0x1013da584)- (id) senderWithKind:(id)arg1 streamId:(id)arg2; (0x1013da5b4)- (id) initWithFactory:(id)arg1 configuration:(id)arg2 constraints:(id)arg3 delegate:(id)arg4; (0x1013d8650)- (id) factory; (0x1013dabec)- (void) close; (0x1013d8e88)- (id) receivers; (0x1013da878)- (id) senders; (0x1013da760)- (id) .cxx_construct; (0x1013dac48)- (void) setDelegate:(id)arg1; (0x1013dabe0)- (BOOL) setConfiguration:(id)arg1; (0x1013d8d64)- (long) connectionState; (0x1013d8ce4)- (BOOL) removeTrack:(id)arg1; (0x1013d9730)- (id) delegate; (0x1013dabc8)- (id) configuration; (0x1013d8e18)- (void) .cxx_destruct; (0x1013dabf4)- (id) localDescription; (0x1013d8ac8)- (void) addStream:(id)arg1; (0x1013d9254)
(NSObject ...)

2. 给要断点的方法添加断点

breakpoint set --address 0x1013d9e34

(lldb) breakpoint set --address 0x1013d9e34
Breakpoint 3: where = WebRTC`___lldb_unnamed_symbol3605$$WebRTC + 3060, address = 0x00000001013d9e34

3. 运行到断点处查看自己需要的信息

  1. 查看当前类相关属性
(lldb) po $arg1  # 查看当前对象
<RTCPeerConnection: 0x280fb3b00>(lldb) pinternals 0x280fb3b00 # 根据对象地址查看对象属性
(RTCPeerConnection) $18 = {NSObject = {isa = RTCPeerConnection}_factory = 0x0000000281474420_localStreams = 0x0000000281445500 @"0 elements"_hasStartedRtcEventLog = false_delegate = 0x0000000282decbb0
}
  1. 查看方法相关参数
(lldb) po (SEL)$arg2 # 查看方法名
"answerForConstraints:completionHandler:"(lldb) po $arg3 # 查看第一个参数 是RTCMediaConstraints
RTC_OBJC_TYPE(RTCMediaConstraints):
{OfferToReceiveAudio = true;OfferToReceiveVideo = true;
}
{}(lldb) po $arg4 # 查看第二个参数 是一个block
<__NSStackBlock__: 0x16ef8e6f8>signature: "v24@?0@"RTCSessionDescription"8@"NSError"16"invoke   : 0x100e89ed4 (/private/var/containers/Bundle/Application/52E19451-C76A-47A5-AA4B-94296EF4BE79/AppRTCMobile.app/AppRTCMobile`__65-[ARDAppClient peerConnection:didSetSessionDescriptionWithError:]_block_invoke_2)copy     : 0x100e84f14 (/private/var/containers/Bundle/Application/52E19451-C76A-47A5-AA4B-94296EF4BE79/AppRTCMobile.app/AppRTCMobile`__copy_helper_block_e8_32w)dispose  : 0x100e84f48 (/private/var/containers/Bundle/Application/52E19451-C76A-47A5-AA4B-94296EF4BE79/AppRTCMobile.app/AppRTCMobile`__destroy_helper_block_e8_32w)(lldb) pinternals 0x16ef8e6f8
(__NSStackBlock__) $24 = {NSBlock = {NSObject = {isa = __NSStackBlock__}}
}
  1. 查看其它乱七八糟信息
(lldb) frame select 1  # 断点跳到frame 1
frame #1: 0x0000000100e89e44 AppRTCMobile`__65-[ARDAppClient peerConnection:didSetSessionDescriptionWithError:]_block_invoke(.block_descriptor=0x000000028145d710) at ARDAppClient.m:497:7494           RTC_OBJC_TYPE(RTCMediaConstraints) *constraints = [self defaultAnswerConstraints];495          __weak ARDAppClient *weakSelf = self;496             // 创建answer
-> 497         [self.peerConnection^498            answerForConstraints:constraints499                completionHandler:^(RTC_OBJC_TYPE(RTCSessionDescription) * sdp, NSError * error) {500                 ARDAppClient *strongSelf = weakSelf;
(lldb) frame variable   # 查看当前帧中局部变量的属性
(NSError *) error = nil
(ARDAppClient *) self = 0x0000000282decbb0
(RTCMediaConstraints *) constraints = 0x0000000281a9df20
(ARDAppClient *) weakSelf = 0x0000000282decbb0
(lldb) pinternals 0x0000000282decbb0    # 查看自己想看的属性
(ARDAppClient) $28 = {NSObject = {isa = ARDAppClient}_fileLogger = 0x0000000280f6d940_statsTimer = nil_settings = 0x00000002818e2930_localVideoTrack = 0x00000002814462e0_shouldGetStats = NO_isTurnComplete = YES_hasReceivedSdp = YES_isInitiator = NO_isLoopback = NO_broadcast = NO_state = kARDAppClientStateConnected_delegate = 0x0000000101d572b0_roomServerClient = 0x00000002818e2940_channel = 0x0000000280f99800_loopbackChannel = nil_turnClient = 0x00000002818e2950_peerConnection = 0x0000000280fb3b00_factory = 0x0000000281474420_messageQueue = 0x000000028147b420 @"4 elements"_roomId = 0xbef0bd39965b99ba @"17600001"_clientId = 0xbef1ddd8f5f3e3ba @"14536218"_iceServers = 0x000000028147b3c0 @"1 element"_websocketURL = 0x00000002834ce980 @"wss://apprtc-ws.webrtc.org:443/ws"_websocketRestURL = 0x00000002834cd180 @"https://apprtc-ws.webrtc.org:443"_defaultPeerConnectionConstraints = nil
}
(lldb) register read    # 顺便瞅一眼各寄存器里都是什么
General Purpose Registers:x0 = 0x0000000280fb3b00x1 = 0x0000000100e9feb3  "answerForConstraints:completionHandler:"x2 = 0x0000000281a9df20x3 = 0x000000016ef8e6f8x4 = 0x00000002834c0d80x5 = 0x0000000000000000x6 = 0x0000000000000000x7 = 0x0000000000000000x8 = 0x0000000100eb5000  "webSocket:didReceivePong:"x9 = 0x0000000000000000x10 = 0x0000000000000006x11 = 0x00000002834c56e8x12 = 0x0000000000000006x13 = 0x0000000000000000x14 = 0x0000000000000018x15 = 0x0000000000000001x16 = 0x0000000101b070f2  (void *)0xb2880000000101b0x17 = 0x00000001013d9e34  WebRTC`___lldb_unnamed_symbol3605$$WebRTC + 3060x18 = 0x0000000000000000x19 = 0x000000028145d710x20 = 0x0000000000000000x21 = 0x0000000280f96200x22 = 0x0000000000000000x23 = 0x0000000000000000x24 = 0x000000028145d710x25 = 0x000000010110bad8  libdispatch.dylib`_dispatch_call_block_and_releasex26 = 0x0000000100e89aec  AppRTCMobile`__65-[ARDAppClient peerConnection:didSetSessionDescriptionWithError:]_block_invoke at ARDAppClient.m:477x27 = 0x00000001012eb960  dyld`_main_thread + 224x28 = 0x000000010116cc80  _dispatch_main_qfp = 0x000000016ef8e7b0lr = 0x0000000100e89e44  AppRTCMobile`__65-[ARDAppClient peerConnection:didSetSessionDescriptionWithError:]_block_invoke + 856 at ARDAppClient.msp = 0x000000016ef8e610pc = 0x00000001013d9e38  WebRTC`___lldb_unnamed_symbol3605$$WebRTC + 3064cpsr = 0x40000000(lldb)

lldb断点framework中方法相关推荐

  1. VS2008 在IE8中 调试 ActiveX控件 无法进入断点的解决方法 设置VS2008和IE8 调试ATL MFC ActiveX控件

    VS2008 在IE8中 调试 ActiveX控件 无法进入断点的解决方法 设置VS2008和IE8 调试ATL MFC ActiveX控件 参考文章: (1)VS2008 在IE8中 调试 Acti ...

  2. Android Framework中的线程Thread及它的threadLoop方法

    当初跟踪Camera的代码中的时候一直追到了HAL层,而在Framework中的代码看见了许许多多的Thread.它们普遍的特点就是有一个threadLoop方法.按照字面的意思应该是这个线程能够循环 ...

  3. 在.Net Micro Framework中显示汉字

    摘要:MF平台支持的字体是专有格式,扩展名为tinyfnt,需要用专门的转化工具才能把windows平台上的字体转换为tinyfnt字体.在.Net Micro Framework SDK中提供了一个 ...

  4. Zend Framework中,执行自定义sql语句

    Zend Framework中的Zend_Db_Table类可以很好的对数据表实现select,insert,delete等操作.但是有时候还是希望自己运行一些sql语句. ZF当然也是支持的. 一种 ...

  5. Entity Framework中IQueryable, IEnumerable, IList的区别

    使用工具追踪EF生成的SQL 使用Entity Framework等ORM框架的时候,SQL对于使用者来说是透明的,往往很多人也不关心ORM所生成的SQL,然而系统出现性能问题的时候就必须关注生成的S ...

  6. 在Entity Framework中使用存储过程(一):实现存储过程的自动映射

    之前给自己放了一个比较长的假期,在这期间基本上没怎么来园子逛.很多朋友的留言也没有一一回复,在这里先向大家道个歉.最近一段时间的工作任务是如何将ADO.NET Entity Framework 4.0 ...

  7. Entity Framework中IQueryable, IEnumerable, IList的区别(转自网络)

    使用工具追踪EF生成的SQL 使用Entity Framework等ORM框架的时候,SQL对于使用者来说是透明的,往往很多人也不关心ORM所生成的SQL,然而系统出现性能问题的时候就必须关注生成的S ...

  8. Entity Framework中的Migrations

    Migrations是Entity Framework中非常有意思的一个工具.Migrations 的目的是用来跟踪数据库的改变. 假如我们想回滚到一个月前的代码,非常容易,有版本管理工具.但是要回滚 ...

  9. .NET(C#) Internals: .NET Framework中已使用的设计模式

    --适合有一定设计模式基础和.NET基础的人阅读. 写在前面 "设计模式"我一向是敬而远之的态度,不会去写这方面的文章,原因有二:第一,要想写好设计模式的文章太难,需要笔者丰富的经 ...

最新文章

  1. Apache Mahout中推荐算法Slope one源码分析
  2. 最简单的iOS网络请求
  3. java 导出pdf_一次java导出pdf的经历
  4. 微信有电脑客户端吗_一个小程序,就能让你用手机控制电脑~
  5. 国外JAVA与IT技术网站地址
  6. python 求系数矩阵,关于numpy:python-如何在数据矩阵中使用nans计算相关矩阵
  7. PDF签名系列(1):PDF签名机制的漏洞分析
  8. 嵌入式linux设计师,make在linux——《嵌入式linux设计与应用》
  9. 如何调用gitee仓库真实图片链接
  10. IEEE Access 模板 图片编辑
  11. threejs特效:边缘暗角shader
  12. 计算机组成原理sp接口,计算机组成原理2008年4月真题试题(02318)
  13. winform去掉laber背景色
  14. char *那些事儿
  15. QTreeWidget去掉虚线框
  16. C#语言中的重要知识详细介绍
  17. html 自动 生成 日期,自己生成Select列表日期时间
  18. 如果让你选最佳的远程桌面,以下9款远程桌面你心中的排名 NO1 是哪个?
  19. Word文档怎么转PDF?这里有需要掌握的方法
  20. 如何删除已被谷歌收录的404错误页面

热门文章

  1. 搜索和查询html代码,html查找框功能
  2. 用 Google Gears 增强您的 Web 应用程序
  3. 传统经典CV算法_边缘检测概念以及常用一阶微分梯度算子
  4. fastapi_No.23_事件_启动和关闭事件
  5. 大学计算机基础专升本模拟题
  6. 虚拟机使用无线网卡上网配置
  7. 6个Java神级项目,帅炸了!
  8. jQuery实现倒计时效果
  9. 更换主板后出现无法设置你的PIN,请重试
  10. oracle中isnumeric,如何用三种方法来实现Oracle中isnumeric?