[mapserver-commits] r10144 - in trunk/docs/en: images optimization

svn at osgeo.org svn at osgeo.org
Fri May 7 15:28:13 EDT 2010


Author: jmckenna
Date: 2010-05-07 15:28:12 -0400 (Fri, 07 May 2010)
New Revision: 10144

Added:
   trunk/docs/en/images/iis-debug.png
   trunk/docs/en/optimization/debugging.txt
Modified:
   trunk/docs/en/optimization/index.txt
Log:
new MapServer Debugging document (ticket:2854)

Added: trunk/docs/en/images/iis-debug.png
===================================================================
(Binary files differ)


Property changes on: trunk/docs/en/images/iis-debug.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: trunk/docs/en/optimization/debugging.txt
===================================================================
--- trunk/docs/en/optimization/debugging.txt	                        (rev 0)
+++ trunk/docs/en/optimization/debugging.txt	2010-05-07 19:28:12 UTC (rev 10144)
@@ -0,0 +1,516 @@
+.. _debugging:
+
+*****************************************************************************
+ Debugging MapServer
+*****************************************************************************
+
+:Author: Jeff McKenna
+:Contact: jmckenna at gatewaygeomatics.com
+:Revision: $Revision: 9846 $
+:Date: $Date: 2010-02-21 12:40:26 -0400 (Sun, 21 Feb 2010) $
+
+.. contents:: Table of Contents
+    :depth: 3
+    :backlinks: top
+
+Introduction
+============
+
+When developing an application for the Internet, you will inevitably across problems many problems 
+in your environment.  The goal of this guide is to assist you with locating the problem
+with your MapServer application.
+
+Links to Related Information
+----------------------------
+
+- :ref:`RFC 28: Redesign of LOG/DEBUG output mechanisms <rfc28>`
+- :ref:`MapServer Errors <errors>`
+
+Steps to Enable MapServer Debugging
+===================================
+
+Starting with MapServer 5.0, you are able to control the levels of debugging/logging
+information returned to you by MapServer, and also control the location of the output
+log file.
+
+In technical terms, there are msDebug() calls in various areas of the MapServer code that generate 
+information that may be useful in tuning and troubleshooting applications.
+
+Step 1: Set the MS_ERRORFILE Variable
+-------------------------------------
+
+The **MS_ERRORFILE** variable is used to specify the output of debug messages from MapServer.  
+You can pass the following values to **MS_ERRORFILE**:
+
+**[filename]**
+  Full path and filename of a log file, to contain MapServer's debug messages.  Any file extension
+  can be used, but *.log* or *.txt* is recommended.  The file will be created, if it does not 
+  already exist.
+  
+**stderr**
+  Use this to send MapServer's debug messages to the Web server's log file (i.e. "standard error"). 
+  If you are using Apache, your debug messages will be placed in the Apache  *error_log* file. 
+  If you are using Microsoft IIS, your debug messages will be sent to *stdout*
+  (i.e. the browser), so its use is discouraged. With IIS it is recommended to direct output to a file
+  instead.
+  
+**stdout**
+  Use this to send MapServer's debug messages to the standard output (i.e. the browser), combined with 
+  the rest of MapServer's output.
+  
+**windowsdebug**
+  Use this to send MapServer's debug messages to the Windows OutputDebugString API, allowing the use of 
+  external programs like SysInternals debugview to display the debug output.
+
+
+Through the Mapfile
+*******************
+
+The recommended way to set the **MS_ERRORFILE** variable is in your mapfile, within the :ref:`MAP` object, 
+such as:
+
+.. code-block:: mapfile
+
+   MAP
+     ...
+     CONFIG "MS_ERRORFILE" "/ms4w/tmp/ms_error.txt"
+     ...
+     LAYER
+       ...
+     END
+   END
+
+Through an Environment Variable
+*******************************
+
+You can also set the **MS_ERRORFILE** variable as an environment variable on your system.  Apache
+users can set the environment variable in Apache's *httpd.conf* file, such as:
+
+::
+
+   SetEnv MS_ERRORFILE "/ms4w/tmp/ms_error.txt"
+
+Windows users can alternatively set the environment variable through the Windows System 
+Properties; but make sure to set a SYSTEM environment variable.
+   
+.. NOTE::
+   If both the *MS_ERRORFILE* environment variable is set and a *CONFIG MS_ERRORFILE* is also set, 
+   then the CONFIG directive takes precedence.
+
+Step 2: Set the DEBUG Level
+---------------------------
+
+You can retrieve varying types of debug messages by setting the *DEBUG* parameter in the :ref:`mapfile`.  
+You can place the *DEBUG* parameter in any LAYER in the mapfile, or instead, set it once in the MAP
+object so that it applies to each layer.  Use the value of the *DEBUG* parameter to set the type of information
+returned, as follows:
+
+DEBUG Levels
+************
+
+**Level 0** 
+  Errors only (DEBUG OFF, or DEBUG 0)
+    
+  In level 0, only msSetError() calls are logged to MS_ERORFILE. No msDebug() output at all. 
+  This is the default and corresponds to the original behavior of MS_ERRORFILE in MapServer 4.x
+    
+**Level 1** 
+  Errors and Notices (DEBUG ON, or DEBUG 1)
+    
+  Level 1 includes all output from Level 0 plus msDebug() warnings about common pitfalls, failed 
+  assertions or non-fatal error situations (e.g. missing or invalid values for some parameters, 
+  missing shapefiles in tileindex, timeout error from remote WMS/WFS servers, etc.)
+
+**Level 2** 
+  Map Tuning (DEBUG 2)
+  
+  Level 2 includes all output from Level 1 plus notices and timing information useful for tuning 
+  mapfiles and applications.  *this is the recommended minimal debugging level*
+  
+**Level 3** 
+  Verbose Debug (DEBUG 3)
+  
+  All of Level 2 plus some debug output useful in troubleshooting problems such as WMS connection 
+  URLs being called, database connection calls, etc.
+
+**Level 4** 
+  Very Verbose Debug (DEBUG 4)
+  
+  Level 3 plus even more details...
+
+**Level 5** 
+  Very Very Verbose Debug (DEBUG 5)
+  
+  Level 4 plus any msDebug() output that might be more useful to developers than to users.
+
+
+Mapfile Example
+***************
+
+The following example is the recommended method to set the *DEBUG* parameter:
+
+.. code-block:: mapfile
+
+   MAP
+     ...
+     CONFIG "MS_ERRORFILE" "/ms4w/tmp/ms_error.txt"
+     DEBUG 5
+     ...
+     LAYER
+       ...
+     END
+   END
+
+The MS_DEBUGLEVEL Environment Variable
+**************************************
+
+Instead of setting the *DEBUG* Debug level in each of your mapfiles, you can also be set 
+the level globally by using the *MS_DEBUGLEVEL* environment variable.
+
+When set, this value is used as the default debug level value for all map and layer objects as they 
+are loaded by the mapfile parser. This option also sets the debug level for any msDebug() call 
+located outside of the context of a map or layer object, for instance for debug statements relating 
+to initialization before a map is loaded. If a DEBUG value is also specified in the mapfile in 
+some map or layer objects then the local value (in the mapfile) takes precedence over the 
+value of the environment variable.
+
+Apache users can set the environment variable in Apache's *httpd.conf* file, such as:
+
+::
+
+   SetEnv MS_DEBUGLEVEL 5
+
+Windows users can alternatively set the environment variable through the Windows System 
+Properties; but make sure to set a SYSTEM environment variable.
+
+Step 3: Turn on CPL_DEBUG (optional)
+------------------------------------
+
+MapServer relies on the `GDAL <http://www.gdal.org/>`__ library to access most data layers, so
+you may wish to turn on GDAL debugging, to hopefully get more information on how GDAL is accessing 
+your data file.  This could be very helpful for problems with accessing raster files and PostGIS 
+tables.  You can trigger this GDAL output by setting the **CPL_DEBUG** variable in your mapfile, 
+within the :ref:`MAP` object, such as:
+
+.. code-block:: mapfile
+
+   MAP
+     ...
+     CONFIG "CPL_DEBUG" "ON"
+     ...
+     LAYER
+       ...
+     END
+   END
+
+Step 4: Test your Mapfile
+-------------------------
+
+Once you have set the *MS_ERRORFILE* and *DEBUG* level in your mapfile, you should now test
+your mapfile and read your generated log file.
+
+Using shp2img
+*************
+
+The recommended way to test your mapfile is to use the MapServer commandline utility :ref:`shp2img`, 
+to verify that your mapfile creates a valid map image. :ref:`shp2img` should be included in your MapServer 
+installation  (`MS4W <http://www.maptools.org/ms4w>`__ users need to execute *setenv.bat* before 
+using the utility).
+
+You can set the *DEBUG* level by passing the :ref:`shp2img` following parameters to your commandline call:
+
+.. NOTE::
+   If you have already set *MS_ERRORFILE* and *DEBUG* in your mapfile, you must comment these out
+   in order to use these :ref:`shp2img` options
+   
+-all_debug
+^^^^^^^^^^
+
+Use this setting to set the debug level for the MAP object and all layers. *this is the recommended switch
+to use*
+
+::
+  
+  shp2img -m spain.map -o test.png -all_debug 5
+  
+    msLoadMap(): 0.002s
+    msDrawMap(): Layer 0 (spain provinces), 0.012s
+    msDrawRasterLayerLow(orthophoto): entering.
+    msDrawGDAL(): src=0,0,3540,2430, dst=188,48,1,1
+    source raster PL (-793.394,-1712.627) for dst PL (188,48).
+    msDrawGDAL(): red,green,blue,alpha bands = 1,2,3,0
+    msDrawMap(): Layer 1 (orthophoto), 0.150s
+    msDrawMap(): Layer 2 (urban areas), 0.004s
+    msDrawMap(): Layer 3 (species at risk), 0.008s
+    msDrawMap(): Layer 4 (populated places), 1.319s
+    msDrawMap(): Drawing Label Cache, 0.014s
+    msDrawMap() total time: 1.513s
+    msSaveImage() total time: 0.039s
+    msFreeMap(): freeing map at 0218C1A8.
+    freeLayer(): freeing layer at 0218F5E0.
+    freeLayer(): freeing layer at 030C33A0.
+    freeLayer(): freeing layer at 030C3BC8.
+    freeLayer(): freeing layer at 030C4948.
+    freeLayer(): freeing layer at 030C7678.
+    shp2img total time: 1.567s
+
+-map_debug
+^^^^^^^^^^
+
+Use this setting to set the debug level for the MAP object only.
+
+::
+
+  shp2img -m spain.map -o test.png -map_debug 5
+  
+    msDrawMap(): Layer 0 (spain provinces), 0.012s
+    msDrawRasterLayerLow(orthophoto): entering.
+    msDrawMap(): Layer 1 (orthophoto), 0.144s
+    msDrawMap(): Layer 2 (urban areas), 0.004s
+    msDrawMap(): Layer 3 (species at risk), 0.008s
+    msDrawMap(): Layer 4 (populated places), 1.323s
+    msDrawMap(): Drawing Label Cache, 0.013s
+    msDrawMap() total time: 1.511s
+    msSaveImage() total time: 0.039s
+    msFreeMap(): freeing map at 0205C1A8.
+
+-layer_debug
+^^^^^^^^^^^^
+
+Use this setting to set the debug level for one layer object only.
+
+::
+ 
+  shp2img -m spain.map -o test.png -layer_debug orthophoto 5
+  
+    msDrawRasterLayerLow(orthophoto): entering.
+    msDrawGDAL(): src=0,0,3540,2430, dst=188,48,1,1
+    source raster PL (-793.394,-1712.627) for dst PL (188,48).
+    msDrawGDAL(): red,green,blue,alpha bands = 1,2,3,0
+    msDrawMap(): Layer 1 (orthophoto), 0.151s
+    freeLayer(): freeing layer at 02F23390.
+    
+Set CPL_DEBUG
+^^^^^^^^^^^^^
+
+At the commandline execute the following:
+
+::
+
+  set CPL_DEBUG=ON
+
+  shp2img -m spain.map -o test.png -layer_debug orthophoto 5
+  
+    msDrawRasterLayerLow(orthophoto): entering.
+    GDAL: GDALOpen(D:\ms4w\apps\spain\map/.\../data/ov172068_200904_c100u50x75c24n.jpg, this=0
+    4059840) succeeds as JPEG.
+    msDrawGDAL(): src=0,0,3540,2430, dst=188,48,1,1
+    source raster PL (-793.394,-1712.627) for dst PL (188,48).
+    msDrawGDAL(): red,green,blue,alpha bands = 1,2,3,0
+    GDAL: GDALDefaultOverviews::OverviewScan()
+    msDrawMap(): Layer 1 (orthophoto), 0.155s
+    freeLayer(): freeing layer at 03113390.
+    GDAL: GDALDeregister_GTiff() called.
+
+Reading Errors Returned by shp2img
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+If there is a problem with your mapfile, :ref:`shp2img` should output the line number in your 
+mapfile that is causing the trouble.  The following tells us that there is a problem on line 85
+of my mapfile:
+
+::
+
+  getSymbol(): Symbol definition error. Parsing error near (truetype2):(line 85)
+  
+If you are using mapfile :ref:`INCLUDEs <include>`, it may be tricky to track down this line number,
+but most of the time the line number is useful.
+
+Using mapserv CGI
+*****************
+
+Another handy way to test your mapfile is to call the mapserv CGI executable at the 
+:ref:`commandline <mapserv>`, such as the following:
+
+::
+
+  mapserv -nh "QUERY_STRING=map=/ms4w/apps/spain/map/spain.map&mode=map"
+
+ON_MISSING_DATA
+***************
+
+If you are using tile indexes to access your data, you should also be aware of the
+configuration settings added in MapServer 5.4 that allow you to tell MapServer how to 
+handle missing data in tile indexes.  Please see the *CONFIG* parameter's *ON_MISSING_DATA* setting
+in the :ref:`map` object for more information.
+
+.. HINT::
+   You can check the attributes in the tileindex by executing "*ogrinfo -al*" on your data file
+
+Step 5: Check your Web Server Logs
+----------------------------------
+
+Once you have verified that there are no problems with you mapfile, next you should check your Web
+server log files, for any related information that may help you narrow down your problem.
+
+Apache
+******
+
+Unix users will usually find Apache's *error_log* file in a path similar to:
+
+::
+
+  /var/log/apache2/
+  
+Windows users will usually find Apache's log files in a path similar to:
+
+::
+
+  C:\Program Files\Apache Group\Apache2\logs
+  
+MapServer for Windows (`MS4W <http://www.maptools.org/ms4w>`__) users will find Apache's log files at:
+
+::
+
+  \ms4w\Apache\logs
+  
+Microsoft IIS
+************* 
+
+IIS log files can be located by:
+
+1. Go to Start -> Control Panel -> Administrative Tools
+2. Open the Internet Information Services (IIS) Manager.
+3. Find your Web site under the tree on the left.
+4. Right-click on it and choose Properties.
+5. On the Web site tab, you will see an option near the bottom that says "Active Log Format." Click on the 
+   Properties button.
+   
+    .. image:: ../images/iis-debug.png 
+
+6. At the bottom of the General Properties tab, you will see a box that contains the log file directory 
+   and the log file name. The full log path is comprised of the log file directory plus the first part 
+   of the log file name, for example:
+   ::
+   
+     C:\WINDOWS\system32\LogFiles\W3SVC1\ex100507.log
+     
+You may also want to check the Windows Event Viewer logs, which is located at:
+
+1. Go to Start -> Control Panel -> Administrative Tools
+2. Computer Management
+3. Event Viewer
+
+.. WARNING::
+   As mentioned previously, in IIS the MapServer *stderr* debug output is returned to 
+   the client instead of routed to the Web Server logs, so be sure to log the output
+   to a file, using:
+   
+   ::
+   
+     CONFIG "MS_ERRORFILE" "/ms4w/tmp/ms_error.txt"
+
+CGI Error - The specified CGI application misbehaved by not returning a complete set of HTTP headers
+****************************************************************************************************
+
+This error is often caused by missing DLL files.  You should try to execute "*mapserv -v* at the 
+commandline, to make sure that MapServer loads properly.
+
+
+Step 6: Verify your Application Settings
+----------------------------------------
+
+If you have verified that MapServer creates a valid map image through :ref:`shp2img`, you've checked
+your MapServer log files, and there are no problems noted in your Web server logs, then you should 
+focus your attention on possible application configuration problems.  "Application" here means how 
+you are displaying your map images on the Web page, such as with `OpenLayers <http://www.openlayers.org>`__.
+
+PHP MapScript
+*************
+
+If you are using PHP MapScript in your application, here are some important notes for debugging:
+
+1. Make sure your *php.ini* file is configured to show all errors, by setting:
+
+   ::
+   
+     display_errors = On
+
+
+2. To enable debugging in PHP MapScript, if you are using MapServer 5.6.0 or more
+   recent, make sure to define *ZEND_DEBUG* in the PHP source.
+   
+   If you are using MapServer < 5.6.0, then:
+
+   - open the file */mapscript/php3/php_mapscript.c*
+
+   - change the following:
+
+     ::
+     
+       #define ZEND_DEBUG 0
+
+       to
+
+       #define ZEND_DEBUG 1
+
+Debugging MapServer using Compiler Debugging Tools
+==================================================
+
+Once you build MapServer in debug mode (*./configure --enable-debug*), you should be 
+able to debug MapServer with most debugging tools. `GDB <http://www.gnu.org/software/gdb/>`__ 
+is an example of a popular debugger tool, that works well with MapServer.
+
+Debugging Older Versions of MapServer (before 5.0)
+==================================================
+
+1. Make sure that MapServer is compiled in debug mode (on unix this is
+   enabled through *./configure --enable-debug*).
+   
+   You can verify that your build was compiled in debug mode, by executing
+   the following at the commandline (look for "DEBUG=MSDEBUG"):
+   
+   ::
+   
+     ./mapserv -v
+     
+       MapServer version 4.10.2 OUTPUT=GIF OUTPUT=PNG OUTPUT=WBMP
+       OUTPUT=SVG SUPPORTS=PROJ SUPPORTS=FREETYPE SUPPORTS=WMS_SERVER
+       SUPPORTS=WMS_CLIENT SUPPORTS=WCS_SERVER SUPPORTS=THREADS SUPPORTS=GEOS
+       INPUT=EPPL7 INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE
+       DEBUG=MSDEBUG 
+
+2. Set the *MS_ERRORFILE** variable is in your mapfile, within the :ref:`MAP` object, 
+   such as:
+
+   .. code-block:: mapfile
+
+     MAP
+       ...
+       CONFIG "MS_ERRORFILE" "/ms4w/tmp/ms_error.txt"
+       ...
+       LAYER
+         ...
+       END
+     END
+
+3. Specify *DEBUG ON* in your MAP object, or in your LAYER objects, such as:
+
+   .. code-block:: mapfile
+
+      MAP
+       ...
+       CONFIG "MS_ERRORFILE" "/ms4w/tmp/ms_error.txt"
+       DEBUG ON
+       ...
+       LAYER
+         ...
+       END
+     END
+
+4. Note that only errors will be written to the log file; all DEBUG output 
+   goes to stderr, in the case of Apache that is Apache's *error_log* file. If you are 
+   using Microsoft IIS, debug output is routed to *stdout* (i.e. the browser), so be sure 
+   to remove *DEBUG ON* statements if using IIS on a production server.
+
+.
\ No newline at end of file

Modified: trunk/docs/en/optimization/index.txt
===================================================================
--- trunk/docs/en/optimization/index.txt	2010-05-07 18:06:33 UTC (rev 10143)
+++ trunk/docs/en/optimization/index.txt	2010-05-07 19:28:12 UTC (rev 10144)
@@ -7,9 +7,10 @@
 .. toctree::
    :maxdepth: 2
 
-   mapfile
-   vector
-   raster
+   debugging
    fastcgi
+   mapfile 
+   raster   
    tileindex
+   vector   
    
\ No newline at end of file



More information about the mapserver-commits mailing list