In addition, when something seems to be hanging or not making much progress, I like to get a feel for what it is doing by taking some dbcc stacktrace samples, perhaps 10 taken a minute apart:
dbcc traceon(3604) -- sends output to client
go
dbcc stacktrace(<spid>)
go
Even without access to the ASE source code, one can often get a sense of what the spid is up to when the function names are descriptive enough (sometimes they are, sometimes they aren't).
-bret