sp; 16
LADDR ---------------- 0000000060009A18 Statement processed.
--//回到window 3,按ctrl+c中断: (gdb) c Continuing. ^C Program received signal SIGINT, Interrupt. 0x00000037990d6407 in semop () from /lib64/libc.so.6 (gdb) bt 8 #0 0x00000037990d6407 in semop () from /lib64/libc.so.6 #1 0x0000000009809c0f in sskgpwwait () #2 0x00000000098089ce in skgpwwait () #3 0x0000000000a86d3f in kslgess () #4 0x00000000093faca5 in ksl_get_shared_latch () #5 0x0000000004a2c53e in kslgetsl_w () #6 0x0000000007d74142 in skdxcall () #7 0x00000000076c96aa in ksdxcall () (More stack frames follow...)
--//可以确定函数调用的堆栈或者称为顺序,当前停在semop睡眠上,可以发现调用kslgetsl_w后,ksl_get_shared_latch, --//紧接着的是kslgess.这样猜测spin计数在调用kslgess或者ksl_get_shared_latch函数里面.
2.重复前面测试,在gdb下设置断点: --//在session 1按ctrl+c,退出window 3的gdb程序,重新执行gdb. --//window 3: $ rlwrap gdb -p 30319 (gdb) break kslgess Breakpoint 1 at 0xa865ca
--//设置断点在kslgess函数调用上.然后在session 1,2分别执行(后面不再说明): --//再次挂起!在window 3,执行如下: --//如果我执行ni 1000应该不会错过什么,可以这时看寄存器应该猜测spin count在那个寄存器中. --//跟踪半天不对,看了链接https://fritshoogland.wordpress.com/2015/07/17/oracle-12-and-latches-part-2/ --//应该在kslskgs函数中.
(gdb) break kslskgs Breakpoint 1 at 0xa874fa (gdb) c Continuing.
Breakpoint 1, 0x0000000000a874fa in kslskgs ()
(gdb) ni 100 .. (gdb) info regi r13 rip r13 0x764 1892 rip 0xa875e3 0xa875e3 <kslskgs+237> (gdb) ni 0x0000000000a875be in kslskgs () (gdb) info regi r13 rip r13 0x764 1892 rip 0xa875be 0xa875be <kslskgs+200> (gdb) ni 0x0000000000a875c8 in kslskgs () (gdb) info regi r13 rip r13 0x764 1892 rip 0xa875c8 0xa875c8 <kslskgs+210> (gdb) ni 0x0000000000a875cb in kslskgs () (gdb) info regi r13 rip r13 0x764 1892 rip 0xa875cb 0xa875cb <kslskgs+213> (gdb) ni 0x0000000000a875d1 in kslskgs () (gdb) info regi r13 rip r13 0x764 1892 rip 0xa875d1 0xa875d1 <kslskgs+219> (gdb) ni 0x0000000000a875d4 in kslskgs () (gdb) info regi r13 rip r13 0x764 1892 rip 0xa875d4 0xa875d4 <kslskgs+222> (gdb) ni 0x0000000000a875da in kslskgs () (gdb) info regi r13 rip r13 0x764 1892 rip 0xa875da 0xa875da <kslskgs+228> (gdb) ni 0x0000000000a875dd in kslskgs () (gdb) info regi r13 rip r13  |