.net开发安卓从入门到放弃 最后的挣扎(排查程序闪退问题记录-到目前为止仍在继续)

news/2024/4/18 18:48:33

安卓apk闪退问题排查记录

  • logcat
  • 程序包名
  • 先看日志(以下日志是多次闪退记录的系统日志,挑拣几次有代表性的发上来)
    • 最近一次闪退
  • adb shell top
    • help
    • 一个demo
    • 说明
  • adb shell dumpsys meminfo <package_name>

ps:写在前面,这里只是记录一些方法,如果您有不同于这里的方法,希望能留言,给我指明方向!
以下的这些方法能够查到一些端倪,但是没办法定位到问题的位置,所以到写这个记录的时候还没有解决闪退问题。

logcat

导出日志到文件
adb logcat -v time >d:\b10.txt

程序包名

com.BOSHIAC.agvapp

先看日志(以下日志是多次闪退记录的系统日志,挑拣几次有代表性的发上来)

最近一次闪退

03-30 23:50:48.597 E/KernelCpuSpeedReader( 1532): Failed to read cpu-freq: /sys/devices/system/cpu/cpu6/cpufreq/stats/time_in_state: open failed: ENOENT (No such file or directory)
03-30 23:50:48.598 E/KernelCpuSpeedReader( 1532): Failed to read cpu-freq: /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state: open failed: ENOENT (No such file or directory)
03-31 00:00:00.015 D/DevicePolicyManager( 1532): updateSystemUpdateFreezePeriodsRecord
03-31 00:00:00.043 W/BroadcastQueue( 1532): Background execution not allowed: receiving Intent { act=android.intent.action.DATE_CHANGED flg=0x20200010 } to com.android.calendar/.widget.CalendarAppWidgetService$CalendarFactory
03-31 00:00:00.064 W/BroadcastQueue( 1532): Background execution not allowed: receiving Intent { act=android.intent.action.DATE_CHANGED flg=0x20200010 } to com.android.inputmethod.latin/com.android.inputmethod.dictionarypack.EventHandler
03-31 00:01:27.393 I/UsageStatsService( 1532): User[0] Flushing usage stats to disk
03-31 00:05:54.776 E/TLOC    ( 1387): [TLOCChannel]"Can't receive message due to timeout"
03-31 00:05:54.778 I/TLOC    ( 1387): [ModemComm  ]"Request succeeded for gps engine lock"
03-31 00:05:54.778 D/TLOC    ( 1387): [TLOCChannel] "Going to receive message for TLOCD"
03-31 00:05:54.778 D/TLOC    ( 1387): [TLOCChannel] "wait for message for user TLOCD"
03-31 00:05:55.777 E/TLOC    ( 1387): [TLOCChannel]"Can't receive message due to timeout"
03-31 00:05:55.777 E/TLOC    ( 1387): [TLOCDaemon ]"Couldn't receive command response"
03-31 00:05:55.777 I/TLOC    ( 1387): [TLOCDaemon ]"timeout passed - start periodic warm-up"
03-31 00:05:55.779 I/TLOC    ( 1387): [ModemComm  ]"Start a session successfully"
03-31 00:05:55.779 D/TLOC    ( 1387): [TLOCDaemon ]"The command finished successfully"
03-31 00:05:55.779 D/TLOC    ( 1387): [TLOCDaemon ]"waiting for command"
03-31 00:05:55.779 D/TLOC    ( 1387): [TLOCChannel] "Going to receive message for TLOCD"
03-31 00:05:55.779 D/TLOC    ( 1387): [TLOCChannel] "wait for message for user TLOCD"
03-31 00:06:15.779 E/TLOC    ( 1387): [TLOCChannel]"Can't receive message due to timeout"
03-31 00:06:15.780 I/TLOC    ( 1387): [TLOCDaemon ]"timeout passed with no location fix - close the session"
03-31 00:06:15.781 I/TLOC    ( 1387): [ModemComm  ]"Stopped the session successfully"
03-31 00:06:15.781 I/TLOC    ( 1387): [Modem      ]"Received event indication of position report with status USER_END"
03-31 00:06:15.781 D/TLOC    ( 1387): [TLOCDaemon ]"The command finished successfully"
03-31 00:06:15.781 D/TLOC    ( 1387): [TLOCDaemon ]"waiting for command"
03-31 00:06:15.781 D/TLOC    ( 1387): [TLOCChannel] "Going to receive message for TLOCD"
03-31 00:06:15.781 D/TLOC    ( 1387): [TLOCChannel] "wait for message for user TLOCD"
--------- beginning of crash
03-31 00:14:01.638 F/libc    ( 7911): Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xb4000071254bbd in tid 8132 (Thread Pool Wor), pid 7911 (.BOSHIAC.agvapp)
03-31 00:14:01.707 F/DEBUG   ( 1487): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
03-31 00:14:01.707 F/DEBUG   ( 1487): Build fingerprint: 'Q115M/Q115M/Q115M:11/RKQ1.210907.001/eng.shubin.20220516.215652:user/test-keys'
03-31 00:14:01.707 F/DEBUG   ( 1487): Revision: '0'
03-31 00:14:01.707 F/DEBUG   ( 1487): ABI: 'arm64'
03-31 00:14:01.707 F/DEBUG   ( 1487): Timestamp: 2023-03-31 00:14:01+0800
03-31 00:14:01.707 F/DEBUG   ( 1487): pid: 7911, tid: 8132, name: Thread Pool Wor  >>> com.BOSHIAC.agvapp <<<
03-31 00:14:01.707 F/DEBUG   ( 1487): uid: 10195
03-31 00:14:01.707 F/DEBUG   ( 1487): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xb4000071254bbd
03-31 00:14:01.707 F/DEBUG   ( 1487):     x0  0000000000000012  x1  0000006f305df608  x2  0000000000000012  x3  0000006f30002020
03-31 00:14:01.707 F/DEBUG   ( 1487):     x4  0000000000000010  x5  0000000000000010  x6  fefeff6e2eff1f1f  x7  7f7f7f7f7f7f7f7f
03-31 00:14:01.707 F/DEBUG   ( 1487):     x8  0000000000000000  x9  ed762b6d22163358  x10 0000000000000002  x11 0000000000000001
03-31 00:14:01.707 F/DEBUG   ( 1487):     x12 0000007297d3a2c3  x13 0000000000000000  x14 0000007297dd1d22  x15 0000000034155555
03-31 00:14:01.707 F/DEBUG   ( 1487):     x16 0000006f3a80da30  x17 0000007297db1050  x18 0000000000000032  x19 0000000000000000
03-31 00:14:01.707 F/DEBUG   ( 1487):     x20 0000000000000000  x21 0000000000000040  x22 0000006f3a7e6648  x23 0000006f3a746545
03-31 00:14:01.707 F/DEBUG   ( 1487):     x24 0000006f3a762d57  x25 000000000000002e  x26 0000006f3a760d21  x27 0000006f3a746543
03-31 00:14:01.707 F/DEBUG   ( 1487):     x28 00b4000071254bbd  x29 0000006f305dfa90
03-31 00:14:01.707 F/DEBUG   ( 1487):     lr  0000006f3a714684  sp  0000006f305dfa30  pc  0000006f3a714694  pst 0000000080001000
03-31 00:14:01.708 F/DEBUG   ( 1487): backtrace:
03-31 00:14:01.708 F/DEBUG   ( 1487):       #00 pc 0000000000271694  /data/app/~~hRM_rd0iTvyiC9SQ4ywSVQ==/com.BOSHIAC.agvapp-o8RFjgJvaNeXA2aE_x2hHw==/lib/arm64/libmonosgen-2.0.so (mono_dump_mem+144)
03-31 00:14:03.032 W/ActivityTaskManager( 1532):   Force finishing activity com.BOSHIAC.agvapp/crc64e731f8ab2063fb12.MainActivity
03-31 00:14:03.032 I/DropBoxManagerService( 1532): add tag=data_app_native_crash isTagEnabled=true flags=0x2
03-31 00:14:03.038 I/BootReceiver( 1532): Copying /data/tombstones/tombstone_08 to DropBox (SYSTEM_TOMBSTONE)
03-31 00:14:03.041 I/DropBoxManagerService( 1532): add tag=SYSTEM_TOMBSTONE isTagEnabled=true flags=0x2
03-31 00:14:03.124 I/ActivityManager( 1532): Process com.BOSHIAC.agvapp (pid 7911) has died: fg  TOP 
03-31 00:14:03.124 I/WindowManager( 1532): WIN DEATH: Window{672110d u0 com.BOSHIAC.agvapp/crc64e731f8ab2063fb12.MainActivity}
03-31 00:14:03.147 W/ActivityManager( 1532): setHasOverlayUi called on unknown pid: 7911
03-31 00:14:06.186 E/TaskPersister( 1532): File error accessing recents directory (directory doesn't exist?).
03-31 00:20:48.575 E/KernelCpuSpeedReader( 1532): Failed to read cpu-freq: /sys/devices/system/cpu/cpu6/cpufreq/stats/time_in_state: open failed: ENOENT (No such file or directory)
03-31 00:20:48.575 E/KernelCpuSpeedReader( 1532): Failed to read cpu-freq: /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state: open failed: ENOENT (No such file or directory)
03-31 00:21:06.262 W/EntropyMixer( 1532): Failed to add HW RNG output to entropy pool
03-31 00:21:06.262 W/EntropyMixer( 1532): java.io.FileNotFoundException: /dev/hw_random: open failed: EACCES (Permission denied)
03-31 00:21:06.262 W/EntropyMixer( 1532): 	at libcore.io.IoBridge.open(IoBridge.java:492)
03-31 00:21:06.262 W/EntropyMixer( 1532): 	at java.io.FileInputStream.<init>(FileInputStream.java:160)
03-31 00:21:06.262 W/EntropyMixer( 1532): 	at java.io.FileInputStream.<init>(FileInputStream.java:115)
03-31 00:21:06.262 W/EntropyMixer( 1532): 	at com.android.server.RandomBlock.fromFile(RandomBlock.java:45)
03-31 00:21:06.262 W/EntropyMixer( 1532): 	at com.android.server.EntropyMixer.addHwRandomEntropy(EntropyMixer.java:205)
03-31 00:21:06.262 W/EntropyMixer( 1532): 	at com.android.server.EntropyMixer.access$000(EntropyMixer.java:59)
03-31 00:21:06.262 W/EntropyMixer( 1532): 	at com.android.server.EntropyMixer$1.handleMessage(EntropyMixer.java:83)
03-31 00:21:06.262 W/EntropyMixer( 1532): 	at android.os.Handler.dispatchMessage(Handler.java:106)
03-31 00:21:06.262 W/EntropyMixer( 1532): 	at android.os.Looper.loop(Looper.java:223)
03-31 00:21:06.262 W/EntropyMixer( 1532): 	at android.os.HandlerThread.run(HandlerThread.java:67)
03-31 00:21:06.262 W/EntropyMixer( 1532): 	at com.android.server.ServiceThread.run(ServiceThread.java:44)
03-31 00:21:06.262 W/EntropyMixer( 1532): Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
03-31 00:21:06.262 W/EntropyMixer( 1532): 	at libcore.io.Linux.open(Native Method)
03-31 00:21:06.262 W/EntropyMixer( 1532): 	at libcore.io.ForwardingOs.open(ForwardingOs.java:166)
03-31 00:21:06.262 W/EntropyMixer( 1532): 	at libcore.io.BlockGuardOs.open(BlockGuardOs.java:254)
03-31 00:21:06.262 W/EntropyMixer( 1532): 	at libcore.io.IoBridge.open(IoBridge.java:478)
03-31 00:21:06.262 W/EntropyMixer( 1532): 	... 10 more
03-31 00:21:06.262 I/EntropyMixer( 1532): Writing entropy...
03-31 00:21:27.538 I/UsageStatsService( 1532): User[0] Flushing usage stats to disk
03-31 00:36:15.783 E/TLOC    ( 1387): [TLOCChannel]"Can't receive message due to timeout"
03-31 00:36:15.787 I/TLOC    ( 1387): [ModemComm  ]"Request succeeded for gps engine lock"
03-31 00:36:15.787 D/TLOC    ( 1387): [TLOCChannel] "Going to receive message for TLOCD"
03-31 00:36:15.787 D/TLOC    ( 1387): [TLOCChannel] "wait for message for user TLOCD"
03-31 00:36:16.785 E/TLOC    ( 1387): [TLOCChannel]"Can't receive message due to timeout"
03-31 00:36:16.785 E/TLOC    ( 1387): [TLOCDaemon ]"Couldn't receive command response"
03-31 00:36:16.785 I/TLOC    ( 1387): [TLOCDaemon ]"timeout passed - start periodic warm-up"
03-31 00:36:16.787 I/TLOC    ( 1387): [ModemComm  ]"Start a session successfully"
03-31 00:36:16.787 D/TLOC    ( 1387): [TLOCDaemon ]"The command finished successfully"
03-31 00:36:16.787 D/TLOC    ( 1387): [TLOCDaemon ]"waiting for command"
03-31 00:36:16.787 D/TLOC    ( 1387): [TLOCChannel] "Going to receive message for TLOCD"
03-31 00:36:16.787 D/TLOC    ( 1387): [TLOCChannel] "wait for message for user TLOCD"
03-31 00:36:36.789 E/TLOC    ( 1387): [TLOCChannel]"Can't receive message due to timeout"
03-31 00:36:36.789 I/TLOC    ( 1387): [TLOCDaemon ]"timeout passed with no location fix - close the session"
03-31 00:36:36.790 I/TLOC    ( 1387): [Modem      ]"Received event indication of position report with status USER_END"
03-31 00:36:36.790 I/TLOC    ( 1387): [ModemComm  ]"Stopped the session successfully"
03-31 00:36:36.790 D/TLOC    ( 1387): [TLOCDaemon ]"The command finished successfully"
03-31 00:36:36.790 D/TLOC    ( 1387): [TLOCDaemon ]"waiting for command"
03-31 00:36:36.790 D/TLOC    ( 1387): [TLOCChannel] "Going to receive message for TLOCD"
03-31 00:36:36.790 D/TLOC    ( 1387): [TLOCChannel] "wait for message for user TLOCD"
03-31 00:41:27.692 I/UsageStatsService( 1532): User[0] Flushing usage stats to disk
03-31 00:50:48.576 E/KernelCpuSpeedReader( 1532): Failed to read cpu-freq: /sys/devices/system/cpu/cpu6/cpufreq/stats/time_in_state: open failed: ENOENT (No such file or directory)
03-31 00:50:48.576 E/KernelCpuSpeedReader( 1532): Failed to read cpu-freq: /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state: open failed: ENOENT (No such file or directory)

adb shell top

help

在这里插入图片描述

一个demo

定时刷新指定进程下的所有线程信息
先通过adb shell ps | grep 找到自己的包对应的pid
adb shell top -H -p 4924 -m 50
在这里插入图片描述

说明

Tasks: 552 total, 1 running, 510 sleeping, 0 stopped, 0 zombie
任务(进程) 系统现在共有552个进程,其中处于运行中的有1个,510个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。
Mem: 5849960k total, 4014628k used, 1835332k free, 5756k buffers
内存状态: 物理内存总量 (5.6G) 使用中的内存总量 空闲内存总量 缓存的内存量
1TB=1024GB ,1GB=1024MB ,1MB=1024KB ,1KB=1024字节。
Swap: 2293756k total, 1039804k used, 1253952k free, 918600k cached
swap交换分区: 交换区总量 使用的交换区总量 空闲交换区总量 缓冲的交换区总量
如果出于习惯去计算可用内存数,这里有个近似的计算公式:
Mem的free + Mem的buffers + Swap的cached
按这个公式此台服务器的可用内存:1835332k + 5756k + 918600k = 2759688k(约2.6G)
800%cpu 13%user 0%nice 31%sys 756%idle 0%iow 0%irq 0%sirq 0%host
cpu状态
800%cpu – CPU总量
13%user – 用户空间占用CPU的百分比。
0%nice – 改变过优先级的进程占用CPU的百分比
31%sys – 内核空间占用CPU的百分比
756%idle – 空闲CPU百分比
0%iow – IO等待占用CPU的百分比
0%irq – 硬中断(Hardware IRQ)占用CPU的百分比
0%sirq – 软中断(Software Interrupts)占用CPU的百分比
0%host –
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)

https://www.jianshu.com/p/68e04c27246e

adb shell dumpsys meminfo <package_name>

查看包数据信息

在这里插入图片描述
重点关注如下几个字段:
(1) Native/Dalvik 的 Heap 信息
具体在上面的第一行和第二行,它分别给出的是JNI层和Java层的内存分配情况,如果发现这个值一直增长,则代表程序可能出现了内存泄漏。

(2) Total 的 PSS 信息
这个值就是你的应用真正占据的内存大小,通过这个信息,你可以轻松判别手机中哪些程序占内存比较大了。

VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

VSS:VSS表示一个进程可访问的全部内存地址空间的大小。这个大小包括了进程已经申请但尚未使用的内存空间。在实际中很少用这种方式来表示进程占用内存的情况,用它来表示单个进程的内存使用情况是不准确的。
RSS:表示一个进程在RAM中实际使用的空间地址大小,包括了全部共享库占用的内存,这种表示进程占用内存的情况也是不准确的。
PSS:表示一个进程在RAM中实际使用的空间地址大小,它按比例包含了共享库占用的内存。假如有3个进程使用同一个共享库,那么每个进程的PSS就包括了1/3大小的共享库内存。这种方式表示进程的内存使用情况较准确,但当只有一个进程使用共享库时,其情况和RSS一模一样。
USS:表示一个进程本身占用的内存空间大小,不包含其它任何成分,这是表示进程内存大小的最好方式!


http://www.ppmy.cn/news/36561.html

相关文章

【01 Provider HAL and Device HAL】

1. Overview Camera Provider Hal 和 Camera Device Hal3 即在Hal3 整个架构中紫色框框出来的部分中: 2. 简介 (1). Android定义了几个Interface: ICameraProvider, ICameraDevice, ICameraDeviceSession, ICameraDeviceCallback 。 Camera Hal 层去实做了这些 Interface。…

SSTI模板注入-中括号、args、下划线、单双引号、os、request、花括号、数字被过滤绕过(ctfshow web入门370)

SSTI模板注入-中括号、args、下划线、单双引号、os、request、花括号、数字被过滤绕过&#xff08;ctfshow web入门370&#xff09; 写在前头 由于request被过滤&#xff0c;我们就不能再使用传参的方式进行传递命令以及被过滤的关键字&#xff0c;下划线中括号花括号都被过滤…

Makefile第六课:Makefile变量

目录Makefile的变量前言1.变量的定义2.变量的引用3.预定义变量总结Makefile的变量 前言 学习杜老师推荐的Makefile教程视频&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考。 之前有转载过杜老师的从零Makefile落地算法大项目文章&#xff0c;感兴趣的可以看看…

Gucci与Yuga Labs合作,探索奢侈品在元宇宙中的数字化体验

看来 Gucci 又要进军元宇宙了。这家意大利时尚巨头正在与Yuga Labs合作&#xff0c;探索元宇宙中时尚与娱乐的交汇点。 Gucci NFT Gucci 已经凭借其为Yuga Labs 的 10KTF 项目设计的品牌服装涉足 NFT 世界。现在&#xff0c;凭借这一多年战略合作伙伴关系&#xff0c;Gucci 将在…

linux简单使用

目录标题查看linux版本查看内核版本查看shell的类型#、$代表什么pwd打印工作目录重启和关闭linux操作系统echo #?查看ip地址用户切换远程连接&#xff08;window/linux一样&#xff09;修改主机名返回上一目录修改普通用户密码查看linux版本 [rootrhcsay ~]# cat /etc/redhat…

Java自定义注解的定义与使用

什么是注解&#xff1f;对于很多初次接触的开发者来说应该都有这个疑问&#xff1f;Annontation是Java5开始引入的新特征&#xff0c;中文名称叫注解。它提供了一种安全的类似注释的机制&#xff0c;用来将任何的信息或元数据&#xff08;metadata&#xff09;与程序元素&#…

6自由度串联机械臂实现电磁铁搬运功能

1. 功能描述 R323样机是一款拥有6自由度的串联机械臂。本文提供的示例所实现的功能为&#xff1a;在6自由度串联机械臂样机上安装电磁铁&#xff0c;底座上安装近红外传感器&#xff0c;当检测到有物品时&#xff0c;实现机械臂电磁铁搬运物品的功能。 ​ 2. 电子硬件 在这个示…

vue项目使用Print.js插件实现PDF文件打印

一&#xff0c;Print.js介绍 Print.js主要是为了帮助我们在应用程序中直接打印PDF文件&#xff0c;而不需要离开界面&#xff0c;也不需要使用嵌入。对于用户不需要打开或下载PDF文件的特殊情况&#xff0c;只需要打印即可。 例如&#xff0c;当用户请求打印在服务器端生成的报…

如何把ntfs改成苹果电脑使用及mac写入ntfs硬盘软件教程

ntfs是一种功能强大的文件系统&#xff0c;该格式的文件系统具有存储空间大&#xff0c;传输单个文件能力强&#xff0c;安全系数高等诸多优点&#xff0c;被广泛应用在移动硬盘中。但ntfs格式硬盘&#xff0c;不能在mac中被正常读写&#xff0c;那么ntfs怎么在mac使用&#xf…

leetcode 汉诺塔问题(面试题)

题目 在经典汉诺塔问题中&#xff0c;有 3 根柱子及 N 个不同大小的穿孔圆盘&#xff0c;盘子可以滑入任意一根柱子。一开始&#xff0c;所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制: (1) 每次只能移动一个盘子;…

Matplotlib库基础图表函数及引力波的绘制实例

pyplot基本图表函数概述 pyplot饼图的绘制 plt.pie() lables指的是饼图的标签 sizes指的是对应的尺寸 explode让第二个30%突出0.1 autopct中间显示百分数的方式 shadowFalse二维饼图不带阴影 startangle90饼图的起始角度 加plt.axis(equal)可以让饼图成为一个正圆形的饼图…

Tomcat学习之源码模块

Tomcat核心模块剖析 Tomcat是一款流行的开源Servlet容器&#xff0c;它提供了一个Web应用程序的运行环境。Tomcat的核心模块可以分为以下几个方面&#xff1a; Catalina&#xff1a; Catalina是Tomcat的核心组件之一&#xff0c;它负责管理Tomcat的生命周期和处理请求。Cata…

【Python】照片居然能变素描?不会画画但是咱会代码

文章目录前言一、准备二、下载预训练模型总结前言 Photo-Sketching 一个能将照片的轮廓识别出来并将其转化为“速写”型图像的开源模块。 比如&#xff0c;这只小狗&#xff1a; 经过模型的转化&#xff0c;会变成卡通版的小狗&#xff1a; 非常秀&#xff0c;这很人工智能…

基于Python的高光谱图像分析教程

1、前言超光谱图像 (HSI) 分析因其在从农业到监控的各个领域的应用而成为人工智能 (AI) 研究的前沿领域之一。 该领域正在发表许多研究论文&#xff0c;这使它变得更加有趣&#xff01; 和“对于初学者来说&#xff0c;在 HSI 上开始模式识别和机器学习是相当麻烦的”&#xff…

pywinauto使用经验

在开发Windows应用程序时&#xff0c;我们经常需要进行测试来确保程序的质量和稳定性。手动测试是一种常见的方法&#xff0c;但是它非常耗时和繁琐&#xff0c;特别是对于大型的应用程序&#xff0c;测试工作量非常大。因此&#xff0c;我们需要自动化测试工具来帮助我们提高测…

selenium自动化测试框架搭建

免责声明:本博客提供的所有内容仅供学习、分享与交流&#xff0c;我们不保证内容的正确性。通过使用本博客内容随之而来的问题与本博客无关。当使用本博客代码时&#xff0c;代表你已接受本博客的免责声明 文章目录前言1、什么是selenium2.Selenium有以下几个特点&#xff1a;正…

Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单

一、立项管理 1、招标立项申请 功能点&#xff1a;招标类项目立项申请入口&#xff0c;用户可以保存为草稿&#xff0c;提交。 2、非招标立项申请 功能点&#xff1a;非招标立项申请入口、用户可以保存为草稿、提交。 3、采购立项列表 功能点&#xff1a;对草稿进行编辑&#x…

3.30 二分图

什么是二分图&#xff1f; 二分图的定义是&#xff1a; 设G(V,E)是一个无向图&#xff0c;如果顶点V可分割为两个互不相交的子集(A,B)&#xff0c;并且图中的每条边&#xff08;i&#xff0c;j&#xff09;所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B)&…

类型系统与V8拆箱装箱机制

目录1. 类型系统1.1 强类型语言1.2 弱类型语言2. V8拆箱装箱机制2.1 拆箱机制2.2 装箱机制2.3 类型判断1. 类型系统 1.1 强类型语言 强类型语言&#xff0c;即强制数据类型定义的语言。也就是说&#xff0c;一旦一个变量被指定了某个数据类型&#xff0c;如果不经过强制转换&a…

UI界面设计-PyQt 5 前沿

UI界面设计-PyQt 5 前沿 PyQt 【配套课件】https://doc.itprojects.cn/0001.zhishi/python.0008.pyqt5rumen/index.html 点击下方对应标题可获得对应功能的代码。 一、安装 pip install PyQt5 -i https://pypi.douban.com/simplepip install PyQt5-tools -i https://pypi.do…