仅仅使用命令行如何根据包名来过滤 logcat

310 天前
 zhwguest

我现在是根据 pidof 命令获取对应包名为进程名的进程 pid ,然后用 logcat --pid 来过滤。

但是这样有两个问题:

1 ) app 重启后,pid 发生改变,我必须重新运行 logcat ;

  1. 有的 app 有多个 process ,pidof 只能获取同包名的进程,仅一个进程能打印出来。

请教大神直接根据包名过滤的方法。

4338 次点击
所在节点    Android
16 条回复
dullwit
310 天前
Masoud2023
310 天前
没做过安卓开发,安卓那个 busybox 有 grep 和 xargs 之类的工具吗?

或许可以组合一个命令出来?
winzkh
310 天前
@Masoud2023 #2 安卓没有 busybox ,用的是 toybox
LLaMA2
310 天前
但你输入 logcat 实际上等于 logcat *:D
如果你要所有的日志那就 logcat *:V
这里的*是你在 anroid 中 log 制定的 tag ,*通配所有,如过还要根据 packgename 做 filter
那就


logcat *:V | grep "我的包名"
vyronlee
310 天前
1 楼的 pidcat ,好用又美观
rekulas
310 天前
pidcat win10 测试可用 但感觉日志似乎还是不全
riverskyfang
309 天前
把 uid 打印出来,然后根据 uid 过滤
behindeye
309 天前
要把 uid 打印,跟进 uid 来过滤
zhwguest
309 天前
@dullwit 这个没看出来比 pidof 命令对我的需求有多大帮助啊,这难道不也是先得到 pid ,然后过滤么。先拿到 Pid 再用 pid 过滤就会有 pid 变更或者不完整的问题啊。

@Masoud2023 我现在就是用的一个组合命令 adb logcat --pid=$(adb shell pidof com.xxx.yyy),我的问题不是如何获取 Pid ,而是使用 Pid 有天生的缺陷,它不持久和唯一;

@ye4tar 我用 logcat *:V 并没有看到输出 package name ,我的 adb 版本是 Version 34.0.1-9680074

@riverskyfang @behindeye 谢谢,uid 相对于 pid 来说,的确是持久化和唯一化的,是非常好的参数。但是您说的打印 uid 是指可以通过 adb 的参数来打印还是说要通过修改程序?我还不知道如何打印出来
dullwit
308 天前
@zhwguest pidcat 命令后面只需要跟 package ,就算重启 app 变化 pid 也没关系,也能正常获取日志
zhwguest
308 天前
@dullwit 感谢,我试一下
behindeye
308 天前
@zhwguest
adb shell pm list packages -U |grep com.android.bluetooth ,这个命令可以过滤出你的应用的 uid ;
然后 adb logcat --uid 10181 过滤日志
zhwguest
308 天前
@behindeye 感谢,但是我用--uid 提示:

```
logcat: Unknown option '--uid'.
```
riverskyfang
307 天前
@zhwguest
adb logcat -v threadtime,uid
zhwguest
306 天前
@riverskyfang 好用,感谢~~~
SupperMary
306 天前
打 log 的时候用相同的 tag 打出来,可以 logcat -s your_tag 这样看

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/954300

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX