I've got a D3D9 application, which works fine on my machine. But when I send it to a friend, his machine won't render any of the 3D content. I already changed the build to enable all error-code checking and they all come back clean. How can I remotely debug why his machine's rendering is broken?
Here is something that may help.
Ask your friend to install the DirectX SDK, then launch the DirectX control panel. From there, select the debug runtime. Finally, tell your friend to launch PIX (included in the DirectX SDK, too) and record a whole frame of your program, then save the result and send it to you. You can run PIX locally in order to guide your friend around the software.
You can then replay the PIX stream on your box and you should get verbose information about what is happening.
Also, it is possible that running PIX on your own machine will tell you what your program is doing wrong.
What steps have you taken, "enable all error-code checking" means nothing to us without knowing what errors you are checking or how. What exactly happens on your friend's machine and how is it different from when you run it, where do the differences show up?
Have you tried running the exact same files on your machine, but NOT in your development environment and from a freshly create directory? You need to do this to verify that all the files needed are present in the package and in the right place before going any further.
A common problem is only running the Debug version and then shipping a Release build, have you tried running the same build type that you send to your friend? Remember that Release will not zero-out allocations and this will cause some D3D initializations to do odd things because of the junk values in the parameter structures.
Look through your code, what could cause models to not render? Are the buffers created from the models NULL and the render is simply skipped, verify that kind of logic.
Do you check D3D device caps to see if it supports features you need? Are you simply choosing the primary device, or do you have a selector to choose which device?
Add logging to a text file, track your startup sequence and important loop events.
Do you track your models loading? How do you know that your models are loaded?
Does everything else work, do you have a HUD or any kind of other rendering in your D3D window that's working just fine or is all rendering broken?
So much can be done to log what's happening and debug locally before trying to find a remote, and more difficult method.
Visual Studio does support remote debugging in the non-express editions. Instructions for setting it up are here: http://msdn.microsoft.com/en-us/library/bt727f1t.aspx
On top of that you'll need some method of seeing the screen and speaking to your friend. I'd go with using Skype with their webcam pointed at their screen.