Classic Asp is kind of old fashioned or even a historical language for some folks but if you are a part of a team which is responsible for maintenance of a huge application, you have to live with Classic Asp and its limitations. Because Asp is a server side language so we have to enable Server side debugging from IIS.
There are different techniques used for debugging classic Asp code. Let’s take a look of them.
Writing Debug Messages
It is the most basic, easy but childish way of debugging classic Asp. You use Response object and print values of your desired variables all over the page.
It won’t allow you to step into DLL files for obvious reasons, but I am sure it’s more efficient than writing debug messages to diagnose the issues.
Here is a small process of using this technique.
- First of all, check if you have enabled server side debugging from IIS. If you haven’t then just do it by having a look as above screen shot displays.
- Create a macro by choosing View->Other Windows->Macro Explorer.
- Record a new Macro and paste the hooking code in the body of this macro.
- Save the macro.
- Hookup the debugger with IIS by opening a Browser and open any .asp page. This will load the iisprocess in the memory.
- Run your macro, it will automatically hook with this process in memory.
- Now open the asp page you want to debug.
- Set a Break Point in the code (in active tags ofcourse
- Browse to your page and it will automatically break at the break-point!
hooking code goes here
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
Sub ClassicASPAttach() Try Dim os As System.Version = System.Environment.OSVersion.Version Dim IISProcess As String = "w3wp.exe" If os.Major = 5 And os.Minor < 2 Then IISProcess = "dllhost.exe" End If Dim processFound As Boolean = False Dim process As EnvDTE80.Process2 For Each process In DTE.Debugger.LocalProcesses 'Determine if the process could the IIS worker process Dim processName As String = process.Name.ToLowerInvariant() Dim processBaseName As String = System.IO.Path.GetFileName(processName) If Not processBaseName = IISProcess Then If Not processBaseName = "inetinfo.exe" Then Continue For End If End If 'Determine if the process contains asp.dll Dim aspLoaded As Boolean = False Dim diagProcess As System.Diagnostics.Process = System.Diagnostics.Process.GetProcessById(process.ProcessID) Dim diagModule As System.Diagnostics.ProcessModule For Each diagModule In diagProcess.Modules Dim moduleName As String = System.IO.Path.GetFileName(diagModule.FileName).ToLowerInvariant() If moduleName = "asp.dll" Then aspLoaded = True Exit For End If Next 'If the process contains asp.dll, attach to it If aspLoaded Then process.Attach2("Script") processFound = True End If Next If Not processFound Then MsgBox("Could not find this IIS process. Hit a web page containing classic ASP script so that the process will start.") End If Catch ex As System.Exception MsgBox(ex.Message) End Try End Sub
Cheers and Happy Coding