[20241107]建立完善ext_kglob.sh脚本.txt
--//一些环境的gdb版本太旧,不支持管道操作,将两者结合起来写成一个脚本。
$ cat ext_kglob.sh
#/bin/bash
# extrace object string from object handle address
# arg1 = address arg2 = offset arg3 = p or other p=pipe
pipe=${3:-p}
offset=${2:-1c8}
if [ "$pipe" == "p" ] ; then
echo x/s 0x${1}+0x${offset} | gdb -q -p $(pgrep -f ora_dbw0_${ORACLE_SID}) | grep '^(gdb)'
else
echo -e "x/s 0x${1}+0x${offset}\nquit\n" >| /tmp/ext_kglob.tmp
gdb -q -batch -p $(pgrep -f ora_dbw0_${ORACLE_SID}) -x /tmp/ext_kglob.tmp | grep "^0x" | grep -v "0x0"
fi
--//简单测试看看:
SYS@book> @ sharepool/shp4p 80baj2c2ur47u 0
SYS@book> @ pr
==============================
HANDLE_TYPE : parent handle address
KGLHDADR : 000000006E6CD0D8
KGLHDPAR : 000000006E6CD0D8
C40 : select * from dept where deptno=20
KGLHDLMD : 0
KGLHDPMD : 0
KGLHDIVC : 0
KGLOBHD0 : 000000006FE20100
KGLOBHD6 : 00
KGLOBHS0 : 4064
KGLOBHS6 : 0
KGLOBT16 : 0
N0_6_16 : 4064
N20 : 4064
KGLNAHSH : 95129850
KGLOBT03 : 80baj2c2ur47u
KGLOBT09 : 65535
PL/SQL procedure successfully completed.
$ ext_kglob.sh 000000006E6CD0D8
(gdb) 0x6e6cd2a0: "select * from dept where deptno=20"
(gdb) quit
$ ext_kglob.sh 000000006E6CD0D8 '' 0
0x6e6cd2a0: "select * from dept where deptno=20"
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3045437/ ,如需转载,请注明出处,否则将追究法律责任。