freenode/#clasp - IRC Chatlog
Search
8:42:57
Younder
A bit late but are you familiar with Valgrind? http://valgrind.org/ It can usually track down problems that defeat other tools in debugging, but is is slow work.
18:06:32
stassats
when scraping, WARNING: redefining PRINT-OBJECT (#<STANDARD-CLASS COMMON-LISP:STANDARD-OBJECT> #<SB-PCL:SYSTEM-CLASS COMMON-LISP:T>) in DEFMETHOD
18:06:33
drmeister
I'm wrestling with exception handling problems that have come about because of the changes.
18:38:31
drmeister
I used to let RAII handle cleaning up things that I now need to handle explicitly
18:39:35
drmeister
This means using invoke in place of call in certain places. I had a call where I needed an invoke so that debugging info was cleaned up on function exit
18:40:45
frgo
I vaguely remember understanding the difference between call and invoke - but I am missing it now.
18:41:59
drmeister
If a function has cleanup code and you use call and the called function unwinds the stack then the cleanup will be skipped.
18:43:47
drmeister
It's a pita to even identify where it's happening and what is happening. I suspected stack corruption for days and wasted a lot of time.
19:21:36
drmeister
Do you recall how to get the owner of an instruction - the enter instruction some other instruction belongs to?
19:22:40
drmeister
I've got an instruction in translate-simple-instruction - I need to know the owner of it.
19:27:28
drmeister
The problem that I wrestled with the last week is exception handling and CALL vs INVOKE for calling functions.
19:28:28
drmeister
So right now if a function can be the target of an UNWIND instruction, that function gets set up differently than a function that is not the target of an UNWIND instruction.
19:29:29
drmeister
Functions that are targets of UNWIND have any CALL to a function that can unwind the stack converted to an INVOKE.
19:30:24
Bike
what if there's an intermediate? like you have functions f1 f2 f3, f1 calls f2 and f2 calls f3, and f3 unwinds into f1?
19:31:39
drmeister
The INVOKE invocations get a thing called a 'landing-pad' attached to them. The 'landing-pad' is a place in the function that checks the C++ exception (stack unwinding) that is coming in to see if this function is the target of that exception and if so - it dispatches into the function and if not it rethrows the exception for a function higher up.