2012/4/9 Andrew Dunstan <and...@dunslane.net>

>
>
> On 04/09/2012 07:38 AM, Clover White wrote:
>
>> Hi,
>>  I'm debugging initdb using gdb.
>>  I found that I could not step in the function getopt_long in line 2572
>> in initdb.c.
>>  I also found that the value of VAR optind never be changed. VAR optind
>> is always equal to 1 but how could optind be larger than the value of
>> argc(the value of argc is 6) in line 2648 and 2654.
>>
>> I was so confused. Could someone give me some help? Thank you~
>>
>>
>>
> Why do you expect it to be? Perhaps if you tell us what problem you're
> actually trying to solve we can help you better.
>
> cheers
>
> andrew
>

Hi, this is my story, it may be a little long :)
  I mistook the parameter -W of initdb at the first time and used it like
this:
    initdb -U pgsql -W 12345 -D /home/pgsql/pg_data
  And I found the database was not created in the right directory, but I
could not find a log file to find out why.
  So, I debug initdb and found out I have mistook the parameter -W, I
should use it like this:
    initdb -U pgsql -W -D /home/pgsql/pg_data

  however, when I debug initdb.c, VAR optind was supported to increased
after getopt_long pasered every parameter,
  but it was alway equal to 1.

  And there is a segment of initdb.c.
    if (optind < argc)
      {
          do something statement
      }

  I print the value of optind and argc:

    (gdb) p optind
    $11 = 1
    (gdb) p argc
    $12 = 6

  optind is obvious less than argc, but the statement above do not excute
at all.

  QUESTION:
    1.why does the statement above not excute?
    2.why is optind always equal to 1?

-- 
Clover White

Reply via email to