Debugging in Classic Asp

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.

Creating Macro

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 :)

About Sallah Ud Din Sarwar

I am a multi skilled Software Engineer with over 4 year’s industry experience in designing and developing Object oriented solutions in Multi layered & N-Tired. I have substantial success to my credit. I have consistently handled complex problems to the satisfaction of my clients by working in stressful situations. I enjoy learning and applying new technologies in a dynamic and forward thinking professional environment.

Check Also

Mastering object-oriented programming (OOP) Concepts: A Comprehensive Guide for C# Interviews

Enhance your C# interview preparation with this comprehensive guide on mastering object-oriented programming (OOP) concepts. Unlock essential OOP pillars, understand solid principles, and gain confidence for success.

Leave a Reply