nwjs崩溃复现、 nwjs-控制台手动操纵、nwjs崩溃调用栈解码、剪切板例子中、nwjs混合模式、xdotool显示nwjs所有进程窗口列表, nwjs arm

nwjs arm64 prebuild

结论: nwjs在postmarketos(alpine linux, pixel3手机)下 , 因 alpine 基于musl libc而非gnu的glibc, 导致nwjs运行Segmentation fault

LeonardLaszlo/nw.js-armv7-binaries.git : 貌似他提供了编译脚本

postmarketos pixel3: arm64环境

uname -a
# Linux pixel3 6.13.0-rc2-sdm845 #2-postmarketos-qcom-sdm845 SMP PREEMPT Fri Jan  3 13:31:22 UTC  aarch64 Linux


wget https://github.com/LeonardLaszlo/nw.js-armv7-binaries/releases/download/nw60-arm64_2022-01-08/nw60-arm64_2022-01-08.tar.gz

tar -xf  nw60-arm64_2022-01-08.tar.gz

cd usr/docker/dist/nwjs-chromium-ffmpeg-branding/
ls
#   nw-headers-v0.60.1.tar.gz       nwjs-symbol-v0.60.1-linux-arm64.tar.gz  nwjs-v0.60.1-linux-arm64.tar.gz

tar -xf  nwjs-v0.60.1-linux-arm64.tar.gz

cd nwjs-v0.60.1-linux-arm64/

pwd #== ~/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64

ls
#chrome_crashpad_handler  icudtl.dat               locales                  nw_100_percent.pak       resources.pak            #v8_context_snapshot.bin
#credits.html             lib/                      nw                       nw_200_percent.pak       swiftshader

file nw
#nw: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[xxHash]=b58328d16786d96e, stripped
file `which bash`
#/bin/bash: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-aarch64.so.1, BuildID[sha1]=ab69421af288153e84b94ef1d60a58e30cc94a14, stripped

#解释器不同, 直接运行 报错 找不到命令, 解决:
sudo ln -s /lib/ld-musl-aarch64.so.1  /lib/ld-linux-aarch64.so.1

export LD_LIBRARY_PATH=/home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.
60.1-linux-arm64/lib/


./nw  #报错 一大堆 找不到符号, 见下段



alpine linux貌似不是gnu的? alpine Running_glibc_programs

alpine 使用的是 轻量级 mul libc , 而 debian|ubuntu|redhat等使用的是gnu 的重量级 glibc

很显然 nw应该是基于 gnu的glibc

而 alpine / gcompat 估计是想模拟 glibc, 因为 没有再报符号找不到 ,

而是直接 Segmentation fault ,说明 模拟不稳定

sudo apk add gcompat
./nw # Segmentation fault


./nw报错

Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __vsnprintf_chk: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __memcpy_chk: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __res_nclose: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __res_ninit: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __memset_chk: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __memmove_chk: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __vfprintf_chk: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __longjmp_chk: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: gnu_get_libc_version: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __fdelt_chk: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __strncat_chk: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: mallinfo: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __sched_cpualloc: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __sched_cpufree: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __close: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __libc_malloc: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __libc_calloc: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __libc_memalign: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __libc_realloc: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __libc_free: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __fprintf_chk: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __sprintf_chk: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: initstate_r: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: random_r: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: backtrace: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: backtrace_symbols: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __mbrlen: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: strtoll_l: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: strtoull_l: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __getauxval: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __register_atfork: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __longjmp_chk: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libnw.so: __libc_stack_end: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libffmpeg.so: __mbrlen: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libffmpeg.so: strtoll_l: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libffmpeg.so: strtoull_l: symbol not found
Error relocating /home/z/usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64/lib/libffmpeg.so: __getauxval: symbol not found
Error relocating ./nw: __libc_malloc: symbol not found
Error relocating ./nw: __libc_calloc: symbol not found
Error relocating ./nw: __libc_memalign: symbol not found
Error relocating ./nw: __libc_realloc: symbol not found
Error relocating ./nw: __libc_free: symbol not found
Error relocating ./nw: __mbrlen: symbol not found
Error relocating ./nw: strtoll_l: symbol not found
Error relocating ./nw: strtoull_l: symbol not found
Error relocating ./nw: __getauxval: symbol not found

-1. nwjs在低版本ubuntu运行情况

ubuntu16.04运行nw-v0.93或0.89报错找不到NSS_3.30、GLIBC_2.25


uname -a
#Linux Asus 4.15.0-112-generic #113~16.04.1-Ubuntu SMP Fri Jul 10 04:37:08 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
cat /etc/issue
#Ubuntu 16.04.7 LTS \n \l


/app/nwjs-sdk-v0.93.0-linux-x64/nw
#nw: /usr/lib/x86_64-linux-gnu/libnss3.so: version `NSS_3.30' not found (required by /app/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so)
#nw: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.25' not found (required by /app/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so)

换成v0.89报错相同

ubuntu18.04正常运行nw-v0.93,但异常运行nw-v0.89(不崩溃但不出界面)


sudo apt install -y libatomic1

/app/nwjs-sdk-v0.93.0-linux-x64/nw  #nw-v0.93正常运行


/app/nwjs-sdk-v0.89.0-linux-x64/nw  #nw-v0.89运行: 不崩溃 但却不出界面

漰溃解决中


/app/nwjs-sdk-v0.89.0-linux-x64/nw --in-process-gpu  --disable-gpu-sandbox  --no-sandbox    --url="https://i.youkuaiyun.com/#/user-center/profile" 

#nw  ...  --disable-devtools 


ubuntu18.04.6 TODO

0. nwjs崩溃复现

nwjs-v09.3崩溃复现

v0.93.0/nwjs-sdk-v0.93.0-linux-x64.tar.gz

/app5/nwjs-sdk-v0.93.0-linux-x64/nw --disable-gpu --url="https://i.youkuaiyun.com/#/user-center/profile"
#/app5/nwjs-sdk-v0.89.0-linux-x64/nw --disable-gpu --url="https://i.youkuaiyun.com/#/user-center/profile"
#即使添加 --ingore-gpu-blacklist 也会崩溃


#win10
#g:\nwjs-sdk-v0.93.0-win-x64\nw.exe --url="https://i.youkuaiyun.com/#/user-center/profile"

右击 --> 检查背景页 --> 漰溃

win10下也崩溃,这说明 这是nwjs自身问题,难道是他不允许这样操作?

ubuntu18.04以下版本的nwjs都可复现此崩溃(已知道nwjs-v0.89在win10下同样操作 正常运行 不会崩溃)

  • nwjs-sdk-v0.39.3-linux-x64.tar.gz
  • nwjs-sdk-v0.59.1-linux-x64.tar.gz
  • nwjs-sdk-v0.79.1-linux-x64.tar.gz
  • nwjs-sdk-v0.93.0-linux-x64.tar.gz
  • nwjs-sdk-v0.49.2-linux-x64.tar.gz
  • nwjs-sdk-v0.69.1-linux-x64.tar.gz
  • nwjs-sdk-v0.89.0-linux-x64.tar.gz

ubuntu22.04下,只验证了nwjs-v0.89复现此崩溃,其他版本未验证,估计也一样崩溃

ubuntu18.04.6安装不到该机器(笔记本asus k43sd), 因此未验证

漰溃原因猜测

猜测 崩溃原因是 ubuntu22的开源显卡驱动程序Nouveau被 google加入了黑名单, 但貌似--ingore-gpu-blacklist可以禁止黑名单(也许禁止不了)

google搜索: Google 决定直接在 Chromium/Chrome 71 将 Nouveau 列入黑名单

漰溃时 控制台输出

 [1119/201403.819553:ERROR:elf_dynamic_array_reader.h(64)] tag not found
[142199:142199:1119/201403.985775:ERROR:object_proxy.cc(576)] Failed to call method: org.freedesktop.ScreenSaver.GetActive: object_path= /org/freedesktop/ScreenSaver: org.freedesktop.DBus.Error.NotSupported: This method is not implemented
[1119/201414.914243:ERROR:elf_dynamic_array_reader.h(64)] tag not found
[1119/201414.914699:ERROR:elf_dynamic_array_reader.h(64)] tag not found
Received signal 11 SEGV_MAPERR 000000000258
#0 0x7893942d46be (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x76d46bd)
#1 0x7893942e5601 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x76e5600)
#2 0x78938c842520 (/usr/lib/x86_64-linux-gnu/libc.so.6+0x4251f)
#3 0x789392e834da (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x62834d9)
#4 0x789394ec5050 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x82c504f)
#5 0x78939671c3b7 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x9b1c3b6)
#6 0x78939671d487 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x9b1d486)
#7 0x78939670ba71 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x9b0ba70)
#8 0x78939670d3a3 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x9b0d3a2)
#9 0x78939670d0dd (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x9b0d0dc)
#10 0x7893967a5dcc (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x9ba5dcb)
#11 0x7893967d38be (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x9bd38bd)
#12 0x789394fba99e (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x83ba99d)
#13 0x789394fba751 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x83ba750)
#14 0x789394fbb473 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x83bb472)
#15 0x789394fbb8cc (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x83bb8cb)
#16 0x789394fbb7a6 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x83bb7a5)
#17 0x7893965b5f2d (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x99b5f2c)
#18 0x7893967d61b6 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x9bd61b5)
#19 0x789394fbf455 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x83bf454)
#20 0x78938fef98c8 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x32f98c7)
#21 0x78938fef95d7 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x32f95d6)
#22 0x78938fef993d (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x32f993c)
#23 0x789394f8bfe9 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x838bfe8)
#24 0x789395c67707 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x9067706)
#25 0x789394f93284 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x8393283)
#26 0x789394f93071 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x8393070)
#27 0x789394f92c10 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x8392c0f)
#28 0x789395c6ab82 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x906ab81)
#29 0x78938cabbc44 g_main_context_dispatch
#30 0x0000000000fe <unknown>
#31 0x789394299130 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x769912f)
#32 0x78939425f80f (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x765f80e)
#33 0x789391d2fbea (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x512fbe9)
#34 0x789391d317d2 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x51317d1)
#35 0x789391d2d358 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x512d357)
#36 0x7893936f89f3 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x6af89f2)
#37 0x7893936f9efe (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x6af9efd)
#38 0x7893936f9d46 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x6af9d45)
#39 0x7893936f7643 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x6af7642)
#40 0x7893936f7c47 (/app5/nwjs-sdk-v0.93.0-linux-x64/lib/libnw.so+0x6af7c46)
#41 0x78938f35d30f ChromeMain
#42 0x78938c829d90 (/usr/lib/x86_64-linux-gnu/libc.so.6+0x29d8f)
  r8: 000000000000001f  r9: 00005928041a64d8 r10: 0000000000000005 r11: 000000000000000a
 r12: 0000592804719ca0 r13: 000059280520fd40 r14: 0000000000000000 r15: 00005928041cf940
  di: 0000000000000000  si: 0000000000000000  bp: 00007ffe19ec1390  bx: 0000000000000003
  dx: 0000000000000000  ax: 0000592804719ca0  cx: 00005928042ecf68  sp: 00007ffe19ec1390
  ip: 000078938fd0d4f4 efl: 0000000000010202 cgf: 002b000000000033 erf: 0000000000000004
 trp: 000000000000000e msk: 0000000000000000 cr2: 0000000000000258
[end of stack trace]

1 nwjs-控制台手动操纵

下载

下载页面/Previous Downloads(旧版下载)/v0.89.0/nwjs-sdk-v0.89.0-linux-x64.tar.gz

FUrl=https://dl.nwjs.io/v0.89.0/nwjs-sdk-v0.89.0-linux-x64.tar.gz

( cd /app5/pack/ && wget $FUrl ;)


tar -xf  /app5/pack/nwjs-sdk-v0.89.0-linux-x64.tar.gz  -C /app/
#产物形式 /app/nwjs-sdk-v0.89.0-linux-x64/bin/nw


js备忘

nwjs打开url

nw.Window.get().window.location="http://blog.youkuaiyun.com"

nwjs获得document

doc=nw.Window.get().window.document

nwjs执行xpath

//doc.evaluate(expr,contextNode,?resolver,?type,$inResult)


snap=doc.evaluate("//*",doc,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null)
const nodeLsA = Array.from({
    length: snap.snapshotLength }, (_, k) => snap.snapshotItem(k));
const nodeLsB = [...Array(snap.snapshotLength).keys()].map(k=>snap.snapshotItem(k));
//A B写法是等效的

it=doc.evaluate("//*",doc,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null)
//it.invalidIteratorState==true : 不合法的遍历器状态?
if(!it.invalidIteratorState){
   
//正常遍历it?
}


xp

nwjs的xpath函数封装


function xp(doc,xpath_str){
   
	const snap=doc.evaluate(xpath_str,doc,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
	const nodeLs = [...Array(snap.snapshotLength).keys()].map(k=>snap.snapshotItem(k));
	return nodeLs;
}

nwjs的背景页控制台下调用

const allNode=xp(nw.Window.get().window.document,"//*");

nwjs的常规页控制台下调用

const allNode=xp(window.document,"//*");

页面按标签分组计数

函数cntGrpByTagName:按照个数从多到少排序


function cntGrpByTagName(doc){
   
const tagLs=xp(doc,"//*").map(e=>e.tagName);
const grp=Object.groupBy(tagLs,x=>x);

const entry_ls=Object.entries(grp).map
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ziix

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值