前言 我们在项目开发过程中可能会因为考虑不周或者对象,变量,方法使用不当导致程序产生bug,严重的时候会导致程序崩溃无法用。...空指针问题导致等。...如下图:通过搜索 logcat 抓到的日志,只能定位到图中 哪个pid 进程 ID ,tid 线程 ID 出现了问题,开发者无法直观的排查错误原因 [8qdiciva4a.png] 使用ndk-stack...使用此工具的方式有两种。您可以将 logcat 文本作为直接输入馈送到程序。...层调用传入空值: [image.png] 3.最后在Terminal中入命令 adb logcat | /Users/pj1053/Library/Android/sdk/ndk-bundle/ndk-stack
需退出后重新打开minicom,软件才会使用上述参数进行初始化。...root 使用此选项在/etc/minirc.dfl中编辑系统范围的缺省值。使用此参数后,minicom 将 不 进行初始化, 而是直接进入配置菜单。...如果你未复位(reset)就退出了minicom,又想重启一次会话(session),那么用这个选项就比较爽(不会再有错误提示:modem is locked —- 注)。...使用此标志, minicom将不再尝试将IBM行字符翻译为ASCII码,而是将其直接传送。许多PC-Unix克隆不经翻译也能正确显示它们(Linux使用专门的模式:Coherent和Sco)。...此模式用于显示8位多字节字符,比如日本字(TMD!应该是中国字!!)。不是8位字符的语言都需要(例如显示芬兰文字就不需要这个)。
然后在kali主机上输入python loader.js,可以观察到安卓机上com.roysue.demo02这个app马上重启了。然后$ adb logcat|grep Sum里的内容也变了。...logcat打印出来的日志如下: $ adb logcat |grep ROYSUE 11-26 22:22:35.689 3051 3051 D ROYSUE.Sum: 80 11-26 22:22...另外,secret()函数为隐藏方法,在app里没有被直接调用。 这时候如果我们直接使用上一节里面的js脚本和loader.js来加载的话,肯定会崩溃。..."message" , my_message_handler) #调用错误处理 script.load() 再运行$ python loader.py的话,就会看到如下的错误信息返回: $ python...参数为String类的时候,由于String类不是Java基本数据类型,而是java.lang.String类型,所以在替换参数的构造上,需要花点心思。
Monkey命令基本参数 -p 用此参数指定一个或多个包。指定包之后,monkey将只允许系统启动指定的app。如果丌指定包, monkey将允许系统启动设备中的所有app。...的最后, 会打印出当前执行事件的次数和所花费的时间;// Monkey finished 代表执行完成\ 2、异常情况 Monkey 测试出现错误后,一般的分析步骤 看Monkey的日志...此外当ANR问题发生后我们可以使用adb pull命令(此命令无需root权限)从被测设备的/data/anr目录下导出名为traces.txt的对应log文件。...3、异常问题搜索 “Exception”(如果出现空指针, NullPointerException,需格外重视,肯定有bug)。 ?..." 显示所有优先级大于等于错误(Error)的日志 adb logcat *:E 显示所有优先级大于等于严重错误的日志 adb logcat *:F 查看安卓版本号 adb shell pm
输出日志 另外一种调试代码的方式就是输出日志,可以直接使用System.out.println(...)的方式将信息输出到LogCat视图中,例如,执行下面的代码,会在LogCat视图中看到如图4所示的信息...图4在LogCat视图中输出的调试信息 HarmonyOS还提供了另外一种输出日志的方式,这就是HiLog类,该类提供了多个静态方法,用于输出不同级别的日志信息。这些静态方法如表1所示。...Object... args); 其中label参数表示输出日志的相关信息,类型是HiLogLabel对象,format表示要输出的日志文本(可以包括格式化占位符),args参数表示格式化的参数值,是可选的参数...第2个参数是domain,就是一个整数类型,第3个参数是日志的标签。Domain和日志标签都会以某种形式显示在日志信息上。 在输出日志信息时,运行格式化日志信息,也就是为日志信息指定占位符。...只有不大于当前级别的信息才会给显示。例如,要过滤WARN信息,只有DEBUG、INFO和WARN这3类信息才会被显示,由于ERROR和FATAL的值逗比WARN大,所以这两类信息不会被显示。
Android SDK为我们提供了Log类来获取程序的日志信息,也提供了LogCat管理器,用来查看程序运行的日志信息及错误日志。...INFO程序日志在DDMS的LogCat面板中,一般使用绿色的文字来表示。 ---- 1.2 Log.e() Log.e()方法主要用来输出ERROR错误日志信息。...ERROR错误日志在DDMS的LogCat面板中,一般使用红色的文字来表示。 ---- 1.3 Log.d() Log.d()方法主要用来输出DEBUG调试日志信息。...在 Android Studio中,可以在Android编辑器中单击显示代码行号的位置,就可以添加或者删除当前行的断点,如下图所示: 2.2 简单调试 为程序设置断点后,单击工具栏的Debug按钮...2.4 单步跳入 在工具栏点击 单步跳入 , 或者按下F7键,就会跳入到调用方法或对象内部单步执行程序 还是刚刚的 a + b 的例子,在第18行断点处,按下F7,则会进入到add()方法的内部。
03 2021-03 今天距2022年303天 这是ITester软件测试小栈第213次推文 本文6602字,阅读约需17分钟 金三银四跳槽季,自动化面试题预热一波 金三银四求职季,接口自动化面试题助攻一波...在非免打扰时间段内,用户能正常收到Push。 当Push消息是针对登录用户的时候,需要检查收到的Push与用户身份是否相符,没有错误的将其他人的消息推送过来。...push消息时,会有红点展示,推送消息阅读前后数字的变化是否正确; 应用在开发、未打开状态、应用启动且在后台运行的情况下是push显示和跳转否正确。 多条推送的合集的显示和跳转是否正确。...APP中访问网络的地方,组件能否正常下载并显示。 APP的SDK与手机系统不兼容。 系统升级后,新版本不兼容老版本的API,返回对象失败,报空指针。 软件权限未开放。...、dumpstate、logcat的输出,也是用于分析错误,输出比较多,建议重定向到一个文件中,如adb bugreport > d:\bugreport.log。
隐私/安全保护增强 MAC 地址权限限制 为进一步保护用户隐私和数据安全,Android 11引入了“单次授权”“权限自动重置”“分区存储”等功能。...对于 target = 12 的应用,在通知栏的消息展示均使用统一的模板。...上面应用名字显示和折叠按钮都是相同的、固定的,下面折叠和展开状态呈现的区域是可自定义的: 折叠和展开的样式: 折叠状态 展开状态 若APP中存在自定义Notification.Style,亦或是使用了...不配置的话,在安卓 12 设备上将不能安装,logcat 也会打印错误日志: Targeting S+ (version 10000 and above) requires that an explicit...ForegroundService通知延迟 前台服务启动后必须调用startForeground() 来显示前台通知,如果应用在5s内未调用 startForeground(),则系统将停止服务并声明此应用为
3.Android 8.0 adb shell dumpsys activity activities | findstr mFocusedActivity 获取当前的 activity 显示空的 4....3.Android 8.0 adb shell dumpsys activity activities | findstr mFocusedActivity 获取当前的 activity 显示空的 靠谱链接...,可以在发布产品中关闭,比较常见) I—Info(信息,一般提示性的消息) W—Warning(警告) E—Error(错误,已经出现可影响运行的错误,比如应用 crash 时输出的日志) 标签(...需要掌握 Java 的类和对象、语法,自己写 Java 版本的测试用例才能用它。 用这个框架可以实现安卓 App 的自动化测试。...text 在 Web 自动化中是文本内容不叫做属性,但是在 App 中它也是属性。 「值是空的就证明当前这个属性(元素)是没有文本内容的。一般文本元素是有文本内容的。
3.Android 8.0 adb shell dumpsys activity activities | findstr mFocusedActivity 获取当前的 activity 显示空的 4....3.Android 8.0 adb shell dumpsys activity activities | findstr mFocusedActivity 获取当前的 activity 显示空的 靠谱链接...,可以在发布产品中关闭,比较常见) I—Info(信息,一般提示性的消息) W—Warning(警告) E—Error(错误,已经出现可影响运行的错误,比如应用 crash 时输出的日志) 标签(...需要掌握 Java 的类和对象、语法,自己写 Java 版本的测试用例才能用它。 用这个框架可以实现安卓 App 的自动化测试。它也有个元素定位的工具: UI Automator Viewer ?...text 在 Web 自动化中是文本内容不叫做属性,但是在 App 中它也是属性。 「值是空的就证明当前这个属性(元素)是没有文本内容的。一般文本元素是有文本内容的。
在 Android 中有一种名为 LogCat 的日志机制,不仅系统日志信息,还有应用日志信息也会输出到 LogCat。...这是一个以安全方式使用 LogCat 的例子。此示例包括用于输出调试日志的Log.d()和Log.v()。如果应用用于发布,这两种方法将被自动删除。...因此,建议在输出Throwable对象时,仅使用Log.d()/v()方法。...在输出日志时,一般根据信息的紧急程度,正确使用最合适的输出方法,并控制输出。 例如,使用严重错误,注意,简单应用的信息通知等类别。...基于这个想法,如上所述,有必要准备系统来防止人为错误并将其引入到项目中,因为如果你没有系统,则必须记住避免在发行版应用中记录敏感信息。
关于内部的第⼆重空判断的作⽤,当多个线程⼀起到达锁位置时,进⾏锁竞争,其中⼀个线程获取锁,如果是第⼀次进⼊则为 null,会进⾏单例对象的创建,完成后释放锁,其他线程获取锁后就会被空判断拦截,直接返回已创建的单例对象...这是因为 new 关键字创建对象不是原⼦操作,创建⼀个对象会经历下⾯的步骤: 在堆内存开辟内存空间 调⽤构造⽅法,初始化对象 引⽤变量指向堆内存空间 对应字节码指令如下: 为了提⾼性能,编译器和处理器常常会对既定的代码执...⾏顺序可能为 1 2 3 或者 1 3 2 ,因此当某个线程在乱序运⾏ 1 3 2 指令的时候,引⽤变量指向堆内存空间,这个对象不为 null,但是没有初始化,其他线程有可能这个时候进⼊了 getInstance...的第⼀个 if(instance == null) 判断不为 nulll ,导致错误使⽤了没有初始化的⾮ null 实例,这样的话就会出现异常,这个就是DCL 失效问题。...当我们在引⽤变量上⾯添加 volatile 关键字以后,会通过在创建对象指令的前后添加内存屏障来禁⽌指令重排序,就可以避免这个问题,⽽且对volatile 修饰的变量的修改对其他任何线程都是可⻅的。
JDK8引入的两个比较强大的新特性是Lambda表达式(下文的Lambda特指JDK提供的Lambda)和Stream,这两个强大的特性让函数式编程在Java开发中发扬光大。...函数式接口 函数式接口和接口默认方法都是JDK8引入的新特性。...,类型N 类型N的临时变量),在方法没有重载可以明确推断参数类型的时候,参数类型可以省略,只留下临时变量列表。特殊地,空参数列表用()表示,如果参数只有一个,可以省略()。 箭头:->。...方法引用的类型归结如下: 类型 例子 静态方法引用 ClassName::methodName 指定对象实例方法引用 instanceRef::methodName 特定类型任意对象方法引用 ContainingType...:通过invokedynamic指令,基于第步中的模板类实例、第步中的方法句柄以及方法入参进行方法句柄的调用,实际上最终委托到第步中定义的静态方法中执行。
Minor GC同样会检查存活下来的对象,并把它们转移到另一个survivor区。这样在一段时间内,总会有一个空的survivor区。...这段小动画里包含了动画原理中的“慢入“和”慢出”,按照12FPS的帧率将1-9这几个画面依次显示,并循环往复播放,即会出现一个可爱的钟摆动画,如果我们在每两张的中间插入一张“中间张”,并且以24FPS播放...此界面就是Memory Monitor,在常用的logcat边上,很多人早就接触到了这个工具,可以很方便地发现运行过程中的性能问题,比如内存抖动,比如CPU占用过多,比如网络链接频繁耗费流量等等。...出现了内存泄漏就会在通知栏上显示这些 我们的MainActivity中的消息队列引用了此活动,导致活动不能被回收,于是内存泄漏了。...循环中一直在创建对象及字符串的拼接,改进方案是把Rect对象的创建放到成员变量中在onCreate中进行初始化,为了避免在logcat输出时产生大量的String对象,改进方案是在onCreate中把String
它通过扫描5555-5585之间的奇数号端口来搜索模拟器或手机, 一旦发现adb守护进程,就通过此端口进行连接。...可以在开发机中通过远程shell的方式使用logcat命令查看日志输出: $ adb logcat 如果是在远程shell中可直接使用命令: # logcat 过滤日志输出 每一条日志消息都有一个标记和优先级与其关联...优先级是下面的字符,顺序是从低到高: V — 明细 (最低优先级) D — 调试 I — 信息 W — 警告 E — 错误 F — 严重错误 S — 无记载 (最高优先级,没有什么会被记载) 通过运行logcat...下面的表达是显示所有优先级大于等于“warning”的日志: adb logcat *:W 如果在开发用电脑上运行 logcat (相对于运行运程shell而言),也可以通过ANDROID_LOG_TAGS...time — 显示日期,调用时间,优先级/标记,PID long —显示所有的元数据字段并且用空行分隔消息内容 可以使用 -v启动 logcat来控制日志格式: [adb] logcat [
关于内部的第⼆重空判断的作⽤,当多个线程⼀起到达锁位置时,进⾏锁竞争,其中⼀个线程获取锁,如果是第⼀次进⼊则为 null,会进⾏单例对象的创建,完成后释放锁,其他线程获取锁后就会被空判断拦截,直接返回已创建的单例对象...这是因为 new 关键字创建对象不是原⼦操作,创建⼀个对象会经历下⾯的步骤: 在堆内存开辟内存空间 调⽤构造⽅法,初始化对象 引⽤变量指向堆内存空间 对应字节码指令如下: 9: astore...⾏顺序可能为17、21、24或者17、24、21,因此当某个线程在乱序运⾏17、24、21指令的时候,引⽤变量指向堆内存空间,这个对象不为 null,但是没有初始化,其他线程有可能这个时候进⼊了 getInstance...的第⼀个 if(instance == null) 判断不为 nulll ,导致错误使用了没有初始化的非空实例,这样的话就会出现异常,这个就是著名的DCL 失效问题。...当我们在引⽤变量上⾯添加 volatile 关键字以后,会通过在创建对象指令的前后添加内存屏障来禁⽌指令重排序,就可以避免这个问题,⽽且对volatile 修饰的变量的修改对其他任何线程都是可⻅的。
受函数式编程启发,Java 8引入了Optional类。Optional类用来封装可能为null的对象引用,提供了一系列方法避免显式的null检查。...如果传入的参数为null(就像这个例子),它会返回一个空的Optional对象。在这个例子中,我们传入了null,所以value是一个空的Optional对象。...为了避免空指针异常,Java程序员可以进行遵循下面这些良好实践。在使用对象之前进行null检查。使用Java 8引入的Optional类。使用空对象设计模式。...程序员可能忘记检查空值,直接使用可能为null的引用,导致运行时错误。这是最危险的bug,因为它可能导致程序崩溃和安全漏洞,在某些系统中会造成严重的后果。...当panic发生时,程序会打印错误信息,开始展开(unwind)调用栈,清理资源(如释放内存),最终终止程序或当前线程,就如同代码清单2-4最后输出注释中的panic出错信息所显示的那样。
存期,但这些对象⽆法被修改 临时对象的⽣命周期只在当前那一行 int main() { // std::string&& r1 = s1; // 错误:不能绑定到左值 std::string...s1 = "Test"; // OK:到 const 的左值引⽤延⻓⽣存期 // r2 += "Test"; // 错误:不能通过到 const 的引⽤修改 const std::string...第⼀种捕捉⽅式是在捕捉列表中显⽰的传值捕捉和传引⽤捕捉,捕捉的多个变量用逗号分割 [x,y, &z] 表⽰x和y是值捕捉,z是引用捕捉,值捕捉的变量不能修改,引⽤捕捉的变量可以修改 ,捕捉列表必须为空,...第⼆种捕捉⽅式是在捕捉列表中隐式捕捉,我们在捕捉列表写⼀个=表⽰隐式值捕捉,在捕捉列表写⼀个&表⽰隐式引⽤捕捉,这样我们 lambda 表达式中⽤了那些变量,编译器就会⾃动捕捉那些变量 // 隐式值捕捉...第三种捕捉⽅式是在捕捉列表中混合使用隐式捕捉和显示捕捉 [=, &x]表⽰其他变量隐式值捕捉,x引⽤捕捉;[&, x, y]表⽰其他变量引⽤捕捉,x和y值捕捉 当使⽤混合捕捉时,第⼀个元素必须是&或=,
LCD1602引脚定义 1602LCD 通常采用标准的16脚接口或引脚,其各引脚含义如下: 第1引脚:GND为电源地。 第2引脚:VCC接5V电源正极。...第6引脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。 第7~14引脚:D0~D7为8位双向数据端。 第15引脚:背光正极。...(通常和供电引脚接一起) 第16引脚:背光负极。...可显示的范围是两行,每行16个字符,可同时显示16X02即32个字符,这也是此显示屏型号为什么叫做1602的原因。...需要注意的是,显示出来的字符将会一直保持显示到下一次有新的显示字符写入,所以,在刷新后不需要显示的位置,需要写入“空”显示,覆盖上一次的显示字符。
在非免打扰时间段内,用户能正常收到Push。 当Push消息是针对登录用户的时候,需要检查收到的Push与用户身份是否相符,没有错误的将其他人的消息推送过来。...push消息时,会有红点展示,推送消息阅读前后数字的变化是否正确; 应用在开发、未打开状态、应用启动且在后台运行的情况下是push显示和跳转否正确。 多条推送的合集的显示和跳转是否正确。...APP中访问网络的地方,组件能否正常下载并显示。 APP的SDK与手机系统不兼容。 系统升级后,新版本不兼容老版本的API,返回对象失败,报空指针。 软件权限未开放。...adb logcat adb logcat -c 10.查找包名/活动名 adb logcat | findstr START 11.生成bugreport文件:adb bugreport , 打印dumpsys...、dumpstate、logcat的输出,也是用于分析错误,输出比较多,建议重定向到一个文件中,如adb bugreport > d:\bugreport.log。
领取专属 10元无门槛券
手把手带您无忧上云