Re: Zombies don't get enabled
Re: Zombies don't get enabled
- Subject: Re: Zombies don't get enabled
- From: "Timothy J. Wood" <email@hidden>
- Date: Fri, 6 Jul 2007 01:06:55 -0700
On Jul 5, 2007, at 12:28 PM, Giovanni Donelli wrote:
I was using 5... because the venerable Aaron Hillegass said so in
http://www.mactech.com/articles/mactech/Vol.21/21.04/DebuggingBugs/
index.html
Anyway I have now set CFZombieLevel to 65553 and the app crashes.
However the stack is contains only:
0 objc_msgSend
That's all, not very usable. Any idea on how having a better
backtrace?
This can be due to crashing in the middle of message dispatch
while objc_msgSend
has extra stuff pushed on the stack. For example, objc_msgSend looks
like this:
(gdb) x/55i objc_msgSend
0x90a594b0 <objc_msgSend>: mov 4(%esp),êx
0x90a594b4 <objc_msgSend+4>: test êx,êx
0x90a594b6 <objc_msgSend+6>: je 0x90a59510 <objc_msgSend+96>
0x90a594b8 <objc_msgSend+8>: mov 0(êx),êx
0x90a594bb <objc_msgSend+11>: mov 8(%esp),ìx
0x90a594bf <objc_msgSend+15>: push íi
0x90a594c0 <objc_msgSend+16>: mov 32(êx),êx
0x90a594c3 <objc_msgSend+19>: push %esi
....
This is grabbing out the isa, looking into the method cache, etc.
With a zombie,
the 'mov's can end up crashing.
If you set a breakpoint on this and single step through it with
instruction display
turned on:
disp/i $pc
b *0x90a594b0
c
... wait for breakpoint ...
si
si
... and do on ...
Then you can get a backtrace before executing the first 'push',
but after it, you'll get:
(gdb) bt
#0 0x90a594c0 in objc_msgSend ()
It used to be possible to then adjust the stack pointer in gdb to
counteract this
offset so the debugger could get a backtrace. Sadly, this is
(sometimes) busted
in the 10.4 version of gdb and you'll get:
(gdb) set $pc = 0xb03a3da8+4
Value being assigned to is no longer active.
Strangely, I just had this *work* once while typing this up and
haven't gotten it
to work again since...
If you can get it to work, you just have to figure out how many
extra words are
are on the stack and add for for each to get them off. An
alternative is to write
your own stack walker (pretty easy on x86) that takes an address as
input (avoiding
the bug with setting $sp).
Luckily, this isn't something one has to do every day since this
is fiddly. Of course,
if zombies worked as normal on CF objects, this wouldn't even be
necessary =(
-tim
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden