Debugging interfaces not available – debugging is disabled..


I recently installed a new build of Softimage, and right from the start I was getting Debugging interfaces not available – debugging is disabled.. messages in the script history.

(Note that I use the Python installed with Softimage.)

I tracked the message down to the SetScriptSite function in
%XSI_HOME%\Application\python\Lib\site-packages\win32comext\axscript\client\framework.py

	#
	# IActiveScript
	def SetScriptSite(self, site):
		# We should still work with an existing site (or so MSXML believes 🙂
		self.scriptSite = site
		if self.debugManager is not None:
			self.debugManager.Close()
		import traceback
		try:
			import win32com.axdebug.axdebug # see if the core exists.
			import debug
			self.debugManager = debug.DebugManager(self)
		except pythoncom.com_error:
			# COM errors will occur if the debugger interface has never been
			# seen on the target system
			trace("Debugging interfaces not available - debugging is disabled..")
			self.debugManager = None
		except ImportError:
			#trace("Debugging extensions (axdebug) module does not exist - debugging is disabled..")
			self.debugManager = None
		except:
			traceback.print_exc()
			trace("*** Debugger Manager could not initialize - %s: %s" % (sys.exc_info()[0],sys.exc_info()[1]))
			self.debugManager = None

		try:
			self.lcid = site.GetLCID() 
		except pythoncom.com_error:
			self.lcid = win32api.GetUserDefaultLCID()
		self.Reset()

Normally (in all my other Softimage installs on this computer), line 10 fails and fires an ImportError. This is invisible because the trace() on line 19 is commented out. So basically, the Softimage install anticipates that win32com.axdebug.axdebug won’t be found.

However, if win32com.axdebug.axdebug is found, then SetScriptSite tries to import debug, and when that fails, you get that Debugging interfaces not available – debugging is disabled.. message. That’s what was happening on my machine.

As usual, my friend Process Monitor was helpful in figuring this out.

My workaround, for now, is to comment out that trace() call on line 16.

The case of the scene that wouldn’t play back


or how I learned to love binary search…


In this case, a customer uploaded a scene that always crashed at a certain point in the playback.

After poking around the scene for awhile, I deleted a model and that fixed the crash. The only problem was that the model contained a thousand (1000) objects, so deleting the model wasn’t really a solution. So my next step was to isolate the problem use a “divide and conquer” approach. Sort of like a binary search:

  • delete half of the objects (eg objects 1 to 500)
  • play back
    • if crash, then the problem is one of the objects in the second half (501 to 1000)
    • else the problem is one of the objects in the first half (1 to 500)
  • Repeat as required… at most 10 times (1000,500,250,125,62,31,16,8,4,2,1)

In the end, I narrowed it down to a single mesh object. We weren’t able to save that mesh (it had to be deleted and then recreated), but we did save the scene.

wikipedia:

A binary search halves the number of items to check with each iteration, so locating an item (or determining its absence) takes logarithmic time. A binary search is a dichotomic divide and conquer search algorithm.

Dividing and conquering the problem space:

Crash recovery in Softimage


Successfully saved scene before system failure
When Softimage crashes, it tries to save a crash recovery file. When you start up Softimage again, it asks you if you want to recover (“Improper exit detected. Do you want to recover?”)

If the crash recovery file isn’t usable, Softimage will try to load an AutoSave file, if there are any available (see this softimage-blog article on AutoSave).

Crash recovery files (and auto save files) are located in the [hidden] system\USER folder of the active project. For example:

C:\Users\blairs\Documents\Support_Project\system\blairs

where

  • Support_Project is the PROJECT name.
  • C:\Users\blairs\Documents\Support_Project is the project location.
  • blairs is the USER name.

Crash recover creates:

  • A system\blairs\CrashSave file
  • A system\blairs\CrashBackup folder with AutoSave files (AutoSave files are scene files without the .scn)

NOTE There’s a Scene Debugging preference for turning Crash Recovery on or off.