Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: debugging question - in case of C ...

Author: Jens Kahlenberg

Date: 08:15:09 06/29/03

Go up one level in this thread


On June 29, 2003 at 10:43:39, Uri Blass wrote:

>On June 29, 2003 at 10:36:28, Uri Blass wrote:
>
>>On June 29, 2003 at 10:05:36, Jens Kahlenberg wrote:
>>
>>>... my advice is to use the assert-macro to state boolean expression at
>>>aproppriate positions in source (see header-file assert.h for details)
>>>
>>>On June 29, 2003 at 08:23:44, Uri Blass wrote:
>>>
>>>>I found that my latest version show different analysis when I give it the same
>>>>position again.
>>>>
>>>>It is not supposed to happen because I did not implement positional learning and
>>>>after setboard command it should forget everything.
>>>>
>>>>The most logical reason that I can think about it is if
>>>>an important global varaible is changed.
>>>
>>>Perhaps variables are not reinitialized and an appropriate assert-macro might
>>>help you ... e. g.: assert( GLOBAL == 42 );
>>>
>>>>
>>>>My question is if there is a simple way to check the global varaibles or global
>>>>arrays that have different values.
>>>
>>>Global arrays are a little bit trickier to assert. I have to think a while about
>>>the problem. I fear, that you need some extra looping-code embraced by #ifndef
>>>NDEBUG ... #endif (see below)
>>>
>>>>
>>>>I can generate a copy for every global varaible and later compare the global
>>>>varaibles with their copies that are not used but this is not a general solution
>>>>because this means that I need to add more debugging code when I add more
>>>>varaibles.
>>>>
>>>>Uri
>>>
>>>You're right ... that would mess up your code and you would have to clean it
>>>later ... errorprone :-( In contrast assertions are turned off by compiler-flag:
>>>-DNDEBUG and can reside in your code _forever_
>>>
>>>Best regards,
>>>Jens
>>
>>Thanks
>>
>>I guess that I will have a special function checkvaraibles to check the
>>varaibles and arrays(I can disable the function by compiler flag)
>>
>>In order to check an array I will have in checkvaraibles something like this for
>>every array:
>>
>>
>>for (i=-8;i<0;i++)
>>if (info[i]!=-1)
>>{
>>	printf("mistake in the board");
>>	printf(" %d ",i);
>>}
>>for (i=0;i<64;i++)
>>if (info[i]!=22)
>>{
>>	printf("mistake in the board");
>>	printf(" %d ",i);
>>}
>>for (i=64;i<72;i++)
>>if (info[i]!=-1)
>>{
>>	printf("mistake in the board");
>>	printf(" %d ",i);
>>}
>>
>>
>>Note that info[i] when i=-8 is not a mistake because I used the following
>>definitions
>>int PADDED_info[80];
>>int * const info = PADDED_info+8;
>>
>>Uri
>
>Note that I may use constant instead of 22(I already have constant that I use in
>the program but there are cases when I forget about it and use the number)
>
>22 means empty square.
>-1 means square that is not in the board.
>
>Uri

Constants are _always_ better than pure numbers (even for sizes of array and so
on). If your compiler has problems you can workaround by (little bit ugly)
#define for the constant.

#define PAD_BEGIN -8
#define INFO_BEGIN 0
#define INFO_END  64
#define PAD_END   72
#define BAD_INFO  <your choice != 0>

#ifndef NDEBUG

int check_info( void ) {
    int i;

    for (i=PAD_BEGIN;i<INFO_BEGIN;i++)
    if (info[i]!=-1) { // oops ... forgotten constant ;-)
        printf("mistake in the board");
	printf(" %d ",i);
        return( BAD_INFO );
    }

    ...
    return( 0 ); // "allowed" number by convention ;-)
}

#endif

and then you state somewhere in your code:

assert( check_info() != BAD_INFO );


If your info is corrupted you'll get an output on stderr:
"assertion failed: assert( check_info() != BAD_INFO ); at line xyz" (or
something like this) where xyz is the the line of your source code ... _very_
helpful for debugging ;-)

Program execution will stop (and a good development environment will
automatically start the debugger and put you to the problem).

If debugging is over everything is cleared by -DNDEBUG in object code, because
macro substitution for assert is: (void)


Good luck,
Jens




This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.