gdb定期收到SIGUSR1 缓慢地(以计数器变量标识进度)到达崩溃, 从而使得能跳过早期正常 到达晚期崩溃 以辅助排查漰溃原因

# gdb脚本编写参考 https://gitcode.net/myz/malloc_hok/glibc_mallocHok_gdbScript/-/tree/z/glibc-2.27-MA%E6%97%A5%E5%BF%97-exit%E5%B0%BE%E5%86%99%E6%97%A5%E5%BF%97/R/__run_exit_handlers-atexit-end



set print pretty on
set pagination off
set breakpoint pending on


set $counter=0

#  "stop", "nostop", "print", "noprint","pass", "nopass", "ignore", or "noignore".

handle SIGUSR1 nostop nopass
catch signal SIGUSR1
commands 1
 silent
 set $counter=$counter+1
 printf "counter= %d \n", $counter
 if $counter >= 350
 backtrace
 end
 continue
end



# run #手工输入run
# continue
# quit

操作步骤














#0. 新开终端Z执行htop 观看cpu 和 内存占用

#1. 新开终端A执行以下命令
#   一开始会因为无进程adlc而报错 可以忽略
# 间隔20毫秒发送一个信号SIGUSR1给进程adlc
# while true; do kill -SIGUSR1 $(pidof adlc); sleep 0.020; done

#2. 新开终端B, 以gdb 调试adlc 并调用此脚本
# gdb -q --command=/fridaAnlzAp/clang-var/bug/20240612_17--openjdk-24-0/human_watch_runtimeFnCall.gdb_script.sh  --args /d2/jdk-jdk-24-0/build_home/hotspot/variant-server/tools/adlc/adlc -q -T -DLINUX=1 -D_GNU_SOURCE=1 -g -DAMD64=1 -D_LP64=1 -DNDEBUG -DPRODUCT /d2/jdk-jdk-24-0/build_home/hotspot/variant-server/support/adlc/all-ad-src.ad -c/d2/jdk-jdk-24-0/build_home/hotspot/variant-server/support/adlc/ad_x86.cpp -h/d2/jdk-jdk-24-0/build_home/hotspot/variant-server/support/adlc/ad_x86.hpp -a/d2/jdk-jdk-24-0/build_home/hotspot/variant-server/support/adlc/dfa_x86.cpp -v/d2/jdk-jdk-24-0/build_home/hotspot/variant-server/support/adlc/adGlobals_x86.hpp

#3. 终端B被gdb占有,  输入 run , 步骤1 将实际开始间隔20毫秒发送 信号SIGUSR1给gdb此脚本
#   从而 间接地 使得 此脚本 间隔20毫秒执行一次 断点处理过程

#执行一次以上步骤 , 获知 当counter==350的时候 , 内存吃了大约4GB, 此时开始打印调用栈
#   看调用栈并没有死循环, 因此 排除死循环
#     剩下另一个排查方案:
#       将 局限范围在adlc依赖的源码文件们中 , 比较 上一次正常的clang-var修改代码 和 此次clang-var修改代码(崩溃)   人工观看二者差异,
#       调整差异量  从新编译 adlc 观看是否崩溃 ,
#       在去掉某个函数的修改后 adlc 恰好不崩溃, 则 就是该函数的修改有问题

gdb定期收到SIGUSR1 缓慢地(以计数器变量标识进度)到达崩溃, 从而使得能跳过早期正常 到达晚期崩溃 以辅助排查漰溃原因

无死循环,并给对方案2 比对法

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ziix

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

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

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

打赏作者

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

抵扣说明:

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

余额充值