git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52045 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			126 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        strategies.h
 | 
						|
// Purpose:     Strategies page of the Doxygen manual
 | 
						|
// Author:      wxWidgets team
 | 
						|
// RCS-ID:      $Id$
 | 
						|
// Licence:     wxWindows license
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
 | 
						|
/*!
 | 
						|
 | 
						|
 @page page_strategies Programming strategies
 | 
						|
 | 
						|
 This chapter is intended to list strategies that may be useful when
 | 
						|
 writing and debugging wxWidgets programs. If you have any good tips,
 | 
						|
 please submit them for inclusion here.
 | 
						|
 | 
						|
 @li @ref page_strategies_reducingerr
 | 
						|
 @li @ref page_strategies_portability
 | 
						|
 @li @ref page_strategies_debug
 | 
						|
 | 
						|
 | 
						|
 <hr>
 | 
						|
 | 
						|
 | 
						|
 @section page_strategies_reducingerr Strategies for reducing programming errors
 | 
						|
 | 
						|
 @subsection page_strategies_reducingerr_useassert Use ASSERT
 | 
						|
 | 
						|
 It is good practice to use ASSERT statements liberally, that check for conditions
 | 
						|
 that should or should not hold, and print out appropriate error messages.
 | 
						|
 | 
						|
 These can be compiled out of a non-debugging version of wxWidgets
 | 
						|
 and your application. Using ASSERT is an example of `defensive programming':
 | 
						|
 it can alert you to problems later on.
 | 
						|
 | 
						|
 See wxASSERT for more info.
 | 
						|
 | 
						|
 @subsection page_strategies_reducingerr_usewxstring Use wxString in preference to character arrays
 | 
						|
 | 
						|
 Using wxString can be much safer and more convenient than using wxChar *.
 | 
						|
 | 
						|
 You can reduce the possibility of memory leaks substantially, and it is much more
 | 
						|
 convenient to use the overloaded operators than functions such as @c strcmp.
 | 
						|
 wxString won't add a significant overhead to your program; the overhead is compensated
 | 
						|
 for by easier manipulation (which means less code).
 | 
						|
 | 
						|
 The same goes for other data types: use classes wherever possible.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 @section page_strategies_portability Strategies for portability
 | 
						|
 | 
						|
 @subsection page_strategies_portability_usesizers Use sizers
 | 
						|
 | 
						|
 Don't use absolute panel item positioning if you can avoid it. Different GUIs have
 | 
						|
 very differently sized panel items. Consider using the @ref overview_sizers instead.
 | 
						|
 | 
						|
 @subsection page_strategies_portability_useresources Use wxWidgets resource files
 | 
						|
 | 
						|
 Use .xrc (wxWidgets resource files) where possible, because they can be easily changed
 | 
						|
 independently of source code. See the @ref overview_xrc for more info.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 @section page_strategies_debug Strategies for debugging
 | 
						|
 | 
						|
 @subsection page_strategies_debug_positivethinking Positive thinking
 | 
						|
 | 
						|
 It is common to blow up the problem in one's imagination, so that it seems to threaten
 | 
						|
 weeks, months or even years of work. The problem you face may seem insurmountable:
 | 
						|
 but almost never is. Once you have been programming for some time, you will be able
 | 
						|
 to remember similar incidents that threw you into the depths of despair. But
 | 
						|
 remember, you always solved the problem, somehow!
 | 
						|
 | 
						|
 Perseverance is often the key, even though a seemingly trivial problem
 | 
						|
 can take an apparently inordinate amount of time to solve. In the end,
 | 
						|
 you will probably wonder why you worried so much. That's not to say it
 | 
						|
 isn't painful at the time. Try not to worry -- there are many more important
 | 
						|
 things in life.
 | 
						|
 | 
						|
 @subsection page_strategies_debug_simplifyproblem Simplify the problem
 | 
						|
 | 
						|
 Reduce the code exhibiting the problem to the smallest program possible
 | 
						|
 that exhibits the problem. If it is not possible to reduce a large and
 | 
						|
 complex program to a very small program, then try to ensure your code
 | 
						|
 doesn't hide the problem (you may have attempted to minimize the problem
 | 
						|
 in some way: but now you want to expose it).
 | 
						|
 | 
						|
 With luck, you can add a small amount of code that causes the program
 | 
						|
 to go from functioning to non-functioning state. This should give a clue
 | 
						|
 to the problem. In some cases though, such as memory leaks or wrong
 | 
						|
 deallocation, this can still give totally spurious results!
 | 
						|
 | 
						|
 @subsection page_strategies_debug_usedebugger Use a debugger
 | 
						|
 | 
						|
 This sounds like facetious advice, but it is surprising how often people
 | 
						|
 don't use a debugger. Often it is an overhead to install or learn how to
 | 
						|
 use a debugger, but it really is essential for anything but the most
 | 
						|
 trivial programs.
 | 
						|
 | 
						|
 @subsection page_strategies_debug_uselogging Use logging functions
 | 
						|
 | 
						|
 There is a variety of logging functions that you can use in your program:
 | 
						|
 see @ref logfunctions.
 | 
						|
 | 
						|
 Using tracing statements may be more convenient than using the debugger
 | 
						|
 in some circumstances (such as when your debugger doesn't support a lot
 | 
						|
 of debugging code, or you wish to print a bunch of variables).
 | 
						|
 | 
						|
 @subsection page_strategies_debug_usedebuggingfacilities Use the wxWidgets debugging facilities
 | 
						|
 | 
						|
 You can use wxDebugContext to check for
 | 
						|
 memory leaks and corrupt memory: in fact in debugging mode, wxWidgets will
 | 
						|
 automatically check for memory leaks at the end of the program if wxWidgets is suitably
 | 
						|
 configured. Depending on the operating system and compiler, more or less
 | 
						|
 specific information about the problem will be logged.
 | 
						|
 | 
						|
 You should also use @ref debugmacros as part of a `defensive programming' strategy,
 | 
						|
 scattering wxASSERTs liberally to test for problems in your code as early as possible. 
 | 
						|
 Forward thinking will save a surprising amount of time in the long run.
 | 
						|
 | 
						|
 See the @ref overview_debugging for further information.
 | 
						|
 | 
						|
*/
 |