lldb断点framework中方法
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. 运行到断点处查看自己需要的信息
- 查看当前类相关属性
(lldb) po $arg1 # 查看当前对象
<RTCPeerConnection: 0x280fb3b00>(lldb) pinternals 0x280fb3b00 # 根据对象地址查看对象属性
(RTCPeerConnection) $18 = {NSObject = {isa = RTCPeerConnection}_factory = 0x0000000281474420_localStreams = 0x0000000281445500 @"0 elements"_hasStartedRtcEventLog = false_delegate = 0x0000000282decbb0
}
- 查看方法相关参数
(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__}}
}
- 查看其它乱七八糟信息
(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中方法相关推荐
- VS2008 在IE8中 调试 ActiveX控件 无法进入断点的解决方法 设置VS2008和IE8 调试ATL MFC ActiveX控件
VS2008 在IE8中 调试 ActiveX控件 无法进入断点的解决方法 设置VS2008和IE8 调试ATL MFC ActiveX控件 参考文章: (1)VS2008 在IE8中 调试 Acti ...
- Android Framework中的线程Thread及它的threadLoop方法
当初跟踪Camera的代码中的时候一直追到了HAL层,而在Framework中的代码看见了许许多多的Thread.它们普遍的特点就是有一个threadLoop方法.按照字面的意思应该是这个线程能够循环 ...
- 在.Net Micro Framework中显示汉字
摘要:MF平台支持的字体是专有格式,扩展名为tinyfnt,需要用专门的转化工具才能把windows平台上的字体转换为tinyfnt字体.在.Net Micro Framework SDK中提供了一个 ...
- Zend Framework中,执行自定义sql语句
Zend Framework中的Zend_Db_Table类可以很好的对数据表实现select,insert,delete等操作.但是有时候还是希望自己运行一些sql语句. ZF当然也是支持的. 一种 ...
- Entity Framework中IQueryable, IEnumerable, IList的区别
使用工具追踪EF生成的SQL 使用Entity Framework等ORM框架的时候,SQL对于使用者来说是透明的,往往很多人也不关心ORM所生成的SQL,然而系统出现性能问题的时候就必须关注生成的S ...
- 在Entity Framework中使用存储过程(一):实现存储过程的自动映射
之前给自己放了一个比较长的假期,在这期间基本上没怎么来园子逛.很多朋友的留言也没有一一回复,在这里先向大家道个歉.最近一段时间的工作任务是如何将ADO.NET Entity Framework 4.0 ...
- Entity Framework中IQueryable, IEnumerable, IList的区别(转自网络)
使用工具追踪EF生成的SQL 使用Entity Framework等ORM框架的时候,SQL对于使用者来说是透明的,往往很多人也不关心ORM所生成的SQL,然而系统出现性能问题的时候就必须关注生成的S ...
- Entity Framework中的Migrations
Migrations是Entity Framework中非常有意思的一个工具.Migrations 的目的是用来跟踪数据库的改变. 假如我们想回滚到一个月前的代码,非常容易,有版本管理工具.但是要回滚 ...
- .NET(C#) Internals: .NET Framework中已使用的设计模式
--适合有一定设计模式基础和.NET基础的人阅读. 写在前面 "设计模式"我一向是敬而远之的态度,不会去写这方面的文章,原因有二:第一,要想写好设计模式的文章太难,需要笔者丰富的经 ...
最新文章
- Apache Mahout中推荐算法Slope one源码分析
- 最简单的iOS网络请求
- java 导出pdf_一次java导出pdf的经历
- 微信有电脑客户端吗_一个小程序,就能让你用手机控制电脑~
- 国外JAVA与IT技术网站地址
- python 求系数矩阵,关于numpy:python-如何在数据矩阵中使用nans计算相关矩阵
- PDF签名系列(1):PDF签名机制的漏洞分析
- 嵌入式linux设计师,make在linux——《嵌入式linux设计与应用》
- 如何调用gitee仓库真实图片链接
- IEEE Access 模板 图片编辑
- threejs特效:边缘暗角shader
- 计算机组成原理sp接口,计算机组成原理2008年4月真题试题(02318)
- winform去掉laber背景色
- char *那些事儿
- QTreeWidget去掉虚线框
- C#语言中的重要知识详细介绍
- html 自动 生成 日期,自己生成Select列表日期时间
- 如果让你选最佳的远程桌面,以下9款远程桌面你心中的排名 NO1 是哪个?
- Word文档怎么转PDF?这里有需要掌握的方法
- 如何删除已被谷歌收录的404错误页面