Oracle Solaris Studio 12.2 dbxtool �e塼�ȥꥢ��
���Υe塼�ȥꥢ��Ǥϡ��Х���ޤ�%ץ?��������Ѥ��ơ�dbx �ǥХå��Ѥ���Ω����ե�����桼�������ե����� (GUI) �Ǥ��� dbxtool �θ��Ū�ʻ�����ˡ�ˤĤ������$��ޤ����ǽ�˴���Ū�ʵ�ǽ�ˤĤ������$������θ塢���ܺ٤ʵ�ǽ�ˤĤ������$��Ƥ����ޤ���
����
���Υe塼�ȥꥢ��Ǥϡ��֥Х���ޤ�!ץץ?��������Ѥ��ơ�dbx �ǥХå��ѤΥ�����ɥ����ե�����桼�������ե����� (GUI) �Ǥ��� dbxtool �θ��Ū�ʻ�����ˡ�ˤĤ������$��ޤ����ǽ�˴���Ū�ʵ�ǽ�ˤĤ������$������θ塢���ܺ٤ʵ�ǽ�ˤĤ������$��Ƥ����ޤ���
�ץ?�����
���Υe塼�ȥꥢ��Ǥϡ�dbx �ǥХå���ñ��ǡ���䵼��Ū�ʥ��ߥ�졼��������Ѥ��ޤ����ޤ���C++ �ǽ줿���Υץ?���Υ����������ɤ��ȡ��뤵�줿 Oracle Solaris Studio 12.2 ���եȥ������� examples/debugger/debug_tutorial �ǥ��쥯�ȥ꤫�����ꤷ�ޤ���
�ǥ��쥯�ȥ�桼�������Ѥκ���ΰ�˥��ԡ����ޤ�����������ޤ���
cp -r /opt/solstudio12.2/examples/debugger/debug_tutorial ~/debug_tutorial
�ץ?�����ۤ��ޤ���
make CC -g -c main.cc CC -g -c interp.cc CC -g -c cmd.cc CC -g -c debugger.cc CC -g -c cmds.cc CC -g main.o interp.o cmd.o debugger.o cmds.o -o a.out
�ץ?���ϼ��Υ⥸�塼�뤫�鹽.����ޤ���
cmd.h |
cmd.cc |
Cmd ���饹���ǥХå����ޥ�ɤ����뤿��Υ١��� |
interp.h |
interp.cc |
Interp ���饹����ñ�ʥ��ޥ�ɥ��ץ |
debugger.h |
debugger.cc |
Debugger ���饹���ǥХå��μ��פʥ��ޥ�ƥ����������� |
cmds.h |
cmds.cc |
���ޤ��ޤʥǥХå����ޥ�ɤμ��� |
main.h |
main.cc |
main() �ؿ�ȥ��顼����Interp �åȥ��åפ������ޤ��ޤʥ��ޥ�ɤ��.���ơ������Υ��ޥ�ɤ� Interp �˳����Ƥޤ���Interp ��¹Ԥ��ޤ��� |
�ץ?����¹Ԥ��ơ�dbx ���ޥ�ɤ��Ĥ���ޤ���
$ a.out > exec date Sun Jun 21 16:13:06 PDT 2009 > display var will display 'var' > stop in X > run running ... stopped in X var = { a = '100' b = '101' c = '<error>' d = '102' e = '103' f = '104' } > quit Goodby $
dbxtool ������
���Τ褦�����Ϥ��ơ�dbxtool ��ư���ޤ���
installation_directory/bin/dbxtool
�ǽ�� dbxtool ��ư�����Ȥ��ˡ�������ɥ��ϼ��Τ褦��ɽ������ޤ���
![dbxtool ������ɥ�](figures/first_time.gif)
���Υe塼�ȥꥢ��� Web �֥饦���ǻ��Ȥ��Ƥ�����ϡ������餯����$��Dz��̤�Ⱦʬ�����Ѥ����Τǡ�dbxtool �Υ��ץꥱ�������Υ���������̤�Ⱦʬ�ˤʤ�褦�˥������ޥ������������Ǥ���
���ˡ�dbxtool �Τ��ޤ��ޤʥ������ޥ�������ޤ���
�ġ���С����������������:
�ġ���С���Ǥ�դξ�����å����ơ��־������ġ���С��������� (Small Toolbar Icons)�פ�j�ޤ���
�ָƤӽФ������å� (Call Stack)�ץ�����ɥ���:
�ָƤӽФ������å� (Call Stack)�ץ�����ɥ��Υإå!���å����ơ�������ɥ�����ӱ��إɥ�å����ޤ����ֿ��Υ����ȥ饤���ΰ��֤ˤ��äƤⵤ�ˤ��ʤ��Ǥ��$�����
�����ǡ��ָƤӽФ������å� (Call Stack)�ץ�����ɥ��Υإå!��α�¦������å����ޤ���
�ָƤӽФ������å� (Call Stack)�ץ�����ɥ��ϱ��ޡ�����˺Ǿ�������ޤ���
�Ǿ������줿�ָƤӽФ������å� (Call Stack)�ץ�������˥���������碌��ȡָƤӽФ������å� (Call Stack)�ץ�����ɥ������粽���졢����������̤Υ�����ɥ��˰ܤ��ȺǾ��������ޤ����Ǿ������줿�ָƤӽФ������å� (Call Stack)�ץ��������å�����ȡָƤӽФ������å� (Call Stack)�ץ�����ɥ������粽���졢�⤦���٥���å�����Ȥޤ��Ǿ�������ޤ���
����ǥᥤ����ɥ�����̤�Ⱦʬ�˽̾��Ǥ���Ϥ��Ǥ���
�֥֥졼���ݥ���� (Breakpoints)�ץ�����ɥ���Ǿ�������:
�֥֥졼���ݥ���� (Breakpoints)�ץ��֤�å����ޤ���
���֤β�����å����ơ��֥֥졼���ݥ���� (Breakpoints)�ץ�����ɥ���Ǿ������ޤ���
�֥ץ?�������� (Process I/O)�ץ�����ɥ��ι��Τ����:
�֥ץ?�������� (Process I/O)�ץ�����ɥ��Υإå!���å������ޤޤˤ��ơ����Υ�����ɥ��� dbxtool ������ɥ��γ�¦�˥ɥ�å����ơ��ǥ����ȥå�˥ɥ�åפ��ޤ�������� dbxtool ������ɥ���¾�Υ��֤˴�ñ�˥����������ʤ��顢�ǥХå����Ƥ���ץ?���������Ϥ��ñ����ߺ��Ѥ����뤳�Ȥ��Ǥ��ޤ���
dbxtool ������ɥ��ǡ֥ץ?�������� (Process I/O)�ץ�����ɥ�����ٹ��Τ�����ˤϡ��֥ץ?�������� (Process I/O)�ץ�����ɥ�����å����ơ��֥�����ɥ������ (Dock window)�פ�j�ޤ���
���ǥ����ǥե���ȥ����������ꤷ�ޤ����֥��ǥ��� (Editor)�ץ�����ɥ������Ĥ��Υ����������ɤ�ɽ��������ǡ����μ��˽����ޤ���
���ġ��� (Tools)�� > �֥��ץ���� (Options)�פ�j�ޤ���
�֥��ץ���� (Options)�ץ�����ɥ��ǡ��֥ե���Ȥȿ� (Fonts & Colors)�ץ��ƥ����j�ޤ���
�ֹ�ʸ (Syntax)�ץ��֤ǡ��ָ8� (Languages)�ץɥ�åץ%���ꥹ�Ȥ��餹�٤Ƥθ8줬j��Ƥ��뤳�Ȥ��ǧ���ޤ���
�֥ե���� (Font)�ץƥ����ȥܥå����β��λ��ȥܥ����å����ޤ���
�֥ե����j�� (Font Chooser)�ץ%����?�ܥå����ǡ��ե���ȡ��������롢����ӥ����������ꤷ����OK�פ�å����ޤ���
�֥��ץ���� (Options)�ץ�����ɥ��ǡ���OK�פ�å����ޤ���
ü�����ɥ��ǥե���ȥ����������ꤷ�ޤ�����dbx ������ (Dbx Console)�פ���ӡ֥ץ?�������� (�ץ?�� I/O)�ץ�����ɥ��� ANSI �����ߥʥ륨�ߥ�졼���Ǥ���
���ġ��� (Tools)�� > �֥��ץ���� (Options)�פ�j�ޤ���
�֥��ץ���� (Options)�ץ�����ɥ��ǡ��֤���¾�Ƽ� (Miscellaneous)�ץ��ƥ����j�ޤ���
��ü�� (Terminal)�ץ��֤�å����ޤ���
�֥ե���ȥ����� (Font Size)�פʤɤ������j�ơ��֥����פ� (To Type)�פ�å����ޤ���
��OK�פ�å����ޤ���
�����%�פο���
���Ѿ�˹礦�褦�� dbxtool �����ꤷ�ޤ��������ˡ��Х����Ĥ����Ĥ��Ƥߤޤ��礦��
�ץ?������⤦���ټ¹Ԥ��ޤ������$�������ϥ��ޥ�ɤ����Ϥ��ʤ��Dz��ԥ������ޤ���
$ a.out > display var will display 'var' > Segmentation Fault (core dumped) $
�����ǡ��¹Բ�ǽ�ե����뤪��ӥ����ե��������ꤷ�� dbxtool ��ư���ޤ���
$ dbxtool a.out core
�ҥ�� - dbxtool ���ޥ�ɤ� dbx ���ޥ�ɤ�Ʊ�����������Ƥ��뤳�Ȥ����ܤ��Ƥ��$�����
dbxtool �ϡ����Τ褦�����Ƥ�ɽ�����ޤ���
![dbx �����륦����ɥ������ strcmp �ؤθƤӽФ�����ɽ������ dbxtool ������ɥ�](figures/first_bug.gif)
�����Ǥ����Ĥ�����ջ���ޤ���
��Dbx ������ (Dbx Console)�ץ�����ɥ��ˡ����Τ褦�ʥ�å�������ɽ������ޤ���
program terminated by signal SEGV (no mapping at fault address) 0xff0318f0: strcmp+0x0170: ld [%ol], %gl Current function is Interp::find
strcmp() �ؿ�� SEGV ��ȯ8���Ƥ��Ƥ⡢dbx �ϥǥХå�����Τ���ǽ�δؿ�ե졼���ưŪ��ɽ�����ޤ������ޤΤ褦�ˡ��ָƤӽФ������å� (Call Stack)�ץ�����ɥ��Υ����å��ȥ졼���Ǥϡ���������μ��Ϥ�Ĵɽ�����Ƹ��ߤΥե졼����ޤ���
�ָƤӽФ������å� (Call Stack)�ץ�����ɥ��˥ѥ���̾���ͤ�ɽ������ޤ�������� strcmp() ���Ϥ��줿 2 ���ܤΥѥ����� 0x0 �ǡ�name ���ͤ� NULL �Ǥ��뤳�Ȥ��狼��ޤ���
�֥��ǥ��� (Editor)�ץ�����ɥ���Υ�٥�!����Υ��ȥ饤�פȻ��Ѱ�ϡ�strcmp() ��ƤӽФ��Ƥ�������Ƥ��ޤ� (�ºݤ˥��顼��ȯ8�������ϡ��ФΥ��ȥ饤�פ����Ǽ�����ޤ�)��
�ҥ�� - �ѥ������ͤ�ɽ������ʤ����ϡ�dbx �Ķ��ѿ� stack_verbose �� .dbxrc �ե�����ǥ�������ꤵ��Ƥ��뤳�Ȥ��ǧ���Ƥ��$������ָƤӽФ������å� (Call Stack)�ץ�����ɥ������å����ơ��־ܺ� (Verbose)�ץe��å��ܥå�����j�ƥe��å��ޡ������ɲä���������ɥ��ξܺ٥⡼�ɤ�ˤ��뤳�Ȥ�Ǥ��ޤ���
�ؿ�ϡ��ѥ����Ȥ�����5���ͤ��Ϥ��������̾Z�Ԥ��ޤ��������ˡ�strcmp() ���Ϥ��줿�ͤ��ǧ���뤿��Τ����Ĥ�����ˡ������ޤ���
���ѿ� (Variables)�ץ�����ɥ��Υѥ������ͤ��ǧ���ޤ���
���ѿ� (Variables)�ץ��֤�å����ޤ���
name ���ͤ� NULL �Ǥ��뤳�Ȥ���դ��Ƥ��$����������ͤ� SEGV �θ���Ǥ����ǽ-���⤤�ΤǤ������⤦����Υѥ��� (*cp)->name() ���ͤ��ǧ���ޤ��礦��
���ѿ� (Variables)�ץ�����ɥ��ǡ�cp �Ρ��ɤ�Ÿ���������� (cp*) �Ρ��ɤ�Ÿ�����ޤ���������� name �� "quit" �ˤʤäƤ��ꡢ��������ꤢ��ޤ���
�ҥ�� - *cp �Ρ��ɤ�Ÿ�������ɲä��ѿ�ɽ������ʤ����ϡ�.dbxrc �ե������ dbx �Ķ��ѿ� output_inherited_members ����������ꤵ��Ƥ��뤳�Ȥ��ǧ���ޤ���������ɥ�����å����ơ��ַѾ����줿���С� (Inherited Members)�ץe��å��ܥå�����ˤ��ƥe��å��ޡ������ɲä��ơ��Ѿ����줿���С���ɽ����ˤ��뤳�Ȥ�Ǥ��ޤ���
�Х롼��ɾ�d���Ѥ��ơ��ѥ������ͤ��ǧ���ޤ����֥��ǥ��� (Editor)�ץ�����ɥ��ǡ���������� strcmp() ���Ϥ���Ƥ����ѿ� name �ξ���֤��ޤ����ҥ�Ȥ�ɽ�����졢name ���ͤ� NULL �Ǥ���Ȥ狼��ޤ���
�Х롼��ɾ�d���Ѥ���ȡ�(*cp)->name() �Τ褦�ʼ���˥���������֤����Ȥ�Ǥ��ޤ������$��������Ǥϼ��˴ؿ�ƤӽФ����ޤޤ�Ƥ��뤿�ᡢ����������֤����ȤϤǤ��ޤ���
�ҥ�� -
�ؿ�ƤӽФ���ޤ༰�ΥХ롼��ɾ�d�̵��ˤʤ�Τϡ�������ͳ����Ǥ���
�ǥХå����Ƥ���Τ������ե�����Ǥ��롣
�ؿ�ƤӽФ��ˤ�����ѤΤ����礬���ꡢ���줬�֥��ǥ��� (Editor)�ץ�����ɥ��˥���������֤��Ƥ��ޤ����Ȥˤ��ȯ8����ΤϺ��롣
�����ǡ�name ���ͤ� NULL �Ǥ���٤��ǤϤʤ����Ȥ���������Ǥ������������ɤΥ����ɤ�������5���ͤ� Interp::find() ���Ϥ����ΤǤ��礦���������Ĵ�٤�ˤϡ���������Ԥ��ޤ���
�֥ǥХå� (Debug)�� > �֥����å� (Stack)�� > �ָƤӽФ����ߤ����� (Make Caller Current)�פ�j�뤫���ޤ��ϥġ���С���ˤ���ָƤӽФ����ߤ����� (Make Caller Current)�ץܥ���
��å����ơ��ƤӽФ������å����˰�ư�����ޤ���
�ָƤӽФ������å� (Call Stack)�ץ�����ɥ��ǡ�Interp::dispatch() ���б�����ե졼���%֥륯��å����ޤ����֥��ǥ��� (Editor)�ץ�����ɥ��ǡ��б����륳���ɤ���Ĵɽ������ޤ���
���Υ����ɤ�̤�ΤǤ����ޤ������������$��Ǥϡ�argv[0] ���ͤ� NULL �Ǥ��뤳�Ȱʳ��Ϥ狼��ޤ���
�֥졼���ݥ���Ȥ���ӥ��ƥå�ư�����Ѥ��ơ����������ưŪ�˥ǥХå�������褤��礬����ޤ���
�֥졼���ݥ���Ȥȥ��ƥå�ư��λ���ˡ
�֥졼���ݥ���Ȥˤ�ꡢ�Х�������p�ǥץ?������ߤ����ꡢ�����ְ�äƤ��뤫�Ф��뤿��˥����ɤƥåץ��롼���뤳�Ȥ��Ǥ��ޤ���
�֥ץ?�������� (Process I/O)�ץ�����ɥ��ι��Τ�ޤ2��Ƥ��ʤ���С����Υ����ߥǹԤ��Ȥ褤�Ǥ��礦��
��p�Ϥ��Υץ?���ޥ�ɹԤ���¹Ԥ��ޤ����������ǡ�dbxtool �ǥץ?����¹Ԥ��ơ��Х���Ƹ����ޤ���
�ġ���С��ǡּ¹� (Run)�ץܥ���
��å����뤫����Dbx ������ (Dbx Console)�ץ�����ɥ��� run �����Ϥ��ޤ���
�֥ץ?�������� (Process I/O)�ץ�����ɥ��Dz��Ԏ������ޤ������ΤȤ����ٹ�ܥå����� SEGV �ˤĤ����Τ餻�ޤ���
�ٹ�ܥå����ǡ����˴����ư����� (Discard and Pause)�פ�å����ޤ������ǥ��� (Editor) ������ɥ��ǡ�Interp::find() �� strcmp() �ؤθƤӽФ������ٶ�Ĵɽ������ޤ���
�ġ���С��ΡָƤӽФ����ߤ����� (Make Caller Current)�ץܥ���
��å����ơ�Interp::dispatch() �˰�p��ɽ�����줿���$ʥ����ɤ˰�ư���ޤ��������ǡ�find() �ؤθƤӽФ��ξ���p�˥֥졼���ݥ���Ȥ�����Ǥ��ޤ�����ǡ��ְ�äƤ�����ͳ��Ĵ�٤뤿�ᡢ�����ɤƥåץ��롼�Ǥ��ޤ���
�֥졼���ݥ���Ȥ����ꤹ��
�֥졼���ݥ���Ȥ����ꤹ��ˤϡ������Ĥ�����ˡ������ޤ������ֹ椬ɽ������Ƥ��ʤ���С��ǽ�˺��ޡ����������å������ֹ��ֹ��ɽ�� (Show Line Numbers)�ץe��å��ܥå�����ˤ��ơ����ǥ����ǹ��ֹ��ͭ��ˤ��ޤ���
127 ���ܤβ��κ��ޡ��������å����ơ��ԥ֥졼���ݥ���Ȥ��ڤ��ؤ��ޤ���
��������¹Ԥ��ơ��ؿ�֥졼���ݥ���Ȥ����ꤷ�ޤ���
�����ǥ��� (Editor)��������ɥ��ǡ���Interp::dispatch�פ�j�ޤ���
�֥ǥХå� (Debug)�� > �ֿ����֥졼���ݥ���� (New Breakpoint)�פ�j�뤫���ޤ��ϱ�����å����ơֿ����֥졼���ݥ���� (New Breakpoint)�פ�j�ޤ����ֿ����֥졼���ݥ���� (New Breakpoint)�ץ%����?�ܥå�����ɽ������ޤ���
j���ؿ��̾p���ִؿ� (Function)�ץե�����ɤ�ɽ������Ƥ��ޤ���
��OK�פ�å����ޤ���
dbx ���ޥ�ɹԤ���ؿ�֥졼���ݥ���Ȥ����ꤹ��Τ����ִ�ñ�Ǥ������Ȥ��м��Τ褦�ˡ���Dbx ������ (Dbx Console)�ץ�����ɥ��� stop in ���ޥ�ɤȴؿ�̾�����Ϥ��ޤ���
(dbx) stop in dispatch (4) stop in Interp::dispatch(char*) (dbx)
��Interp::dispatch�פ����Ϥ���ɬ�פ��ʤ����Ȥ��狼��ޤ����ؿ�̾����ꤹ��$��ǽ�ʬ�Ǥ���
���ߤϡ����ǥ������ˤʤäƤ��ޤ���
![�ʎ����ǥ��� (Editor)��������ɥ�](figures/cluttered_editor.gif)
�֥֥졼���ݥ���� (Breakpoints)�ץ�����ɥ�����Ѥ��ơ���������åפǤ��ޤ���
�֥֥졼���ݥ���� (Breakpoints)�ץ��֤�å����ޤ� �ʤޤ���p�˺Ǿ������Ƥ�����Ϻ��粽���ޤ�)��
�ԥ֥졼���ݥ���Ȥ���Ӵؿ�֥졼���ݥ���Ȥ� 1 �Ĥ�j�ơ�������å����ơֺ�� (Delete)�פ�j�ޤ���
�ؿ�֥졼���ݥ���Ȥ�����
���ǥ������ڤ��ؤ��ơ��ԥ֥졼���ݥ���Ȥ����ꤹ�뤳�Ȥ�ľ��Ū�Ǥ����礬����ޤ������$���¿���� dbx �桼�����ϡ�������ͳ�Ǵؿ�֥졼���ݥ���Ȥ���ߤޤ���
��Dbx ������ (Dbx Console)�ץ�����ɥ��� ��si dispatch�פ����Ϥ������ñ�ʤϤ��Ǥ�������ϡ����ǥ����ǥե���������֥졼���ݥ���Ȥ����֤���Ԥޤǥ����?�뤹���֤�ʤ��ޤ���
���ǥ�����Ǥ�դΥƥ����Ȥ�j�ơ��ؿ�֥졼���ݥ���Ȥ��.�Ǥ��ޤ����������äơ��ե�������ΤǤϤʤ����ƤӽФ������Ȥ���ؿ��˥֥졼���ݥ���Ȥ�����Ǥ��ޤ���
�ҥ�� - si �ϡ�stop in ����̾�Ǥ����ۤȤ�ɤ� dbx �桼������¿�����̾����d�������������Ƥ� dbx ������ե����� ~/.dbxrc ���֤��ޤ������ˡ�����Ū������ޤ���
alias si stop in alias sa stop at alias s step alias n next alias r run
�ؿ�֥졼���ݥ���Ȥ�̾p�ϡ��֥֥졼���ݥ���� (Breakpoint)�ץ�����ɥ���ɽ������Ƥ��ޤ����ԥ֥졼���ݥ���Ȥ�̾p��ɽ������Ƥ��ޤ��������äơ����Ȥ��� interp.cc:127 �˲������Ҥ���Ƥ��뤫�Ϥ狼��ޤ���(�ºݤˤϡ��֥֥졼���ݥ���� (Breakpoint)�ץ�����ɥ��ιԥ֥졼���ݥ���Ȥ���å������֥������˰�ư (GoTo Source)�פ�j�뤫���ޤ��Ϥ��Υ֥졼���ݥ���Ȥ�%֥륯��å�����ȡ�127 ���ܤ����Ƥ�Ǥ��ޤ���)
�ؿ�֥졼���ݥ���Ȥ������³���ޤ���dbxtool �ϥ֥졼���ݥ���Ȥ��³�����뤿�ᡢ�����ɤ��Խ����������������)��Υޡ�����Ԥʤä��ꤹ��ȡ����ֹ�֥졼���ݥ���Ȥϴ�ñ�ˤ���Ƥ��ޤ����Ȥ�����ޤ����ؿ�̾�����Խ����Ѥ����ޤ���
�����åeݥ���Ȥȥ��ƥå�ư��λ���ˡ
�������äơ����ߡ�Interp::dispatch() ��ñ��Υ֥졼���ݥ���Ȥ�����ޤ����դ����ӡּ¹� (Run)�� ��å������֥ץ?�������� (Process I/O)�ץ�����ɥ��β��ԥ������ȡ��ץ?���ϼ¹Բ�ǽ�����ɤ�ޤ� dispatch() �ؿ�κǽ�ιԤ���ߤ��ޤ���
![122 ���ܤǼ¹Ԥ���ߤ����֥��ǥ��� (Editor)�ץ�����ɥ�](figures/stopped_in_dispatch.gif)
culprit �� find() ���Ϥ���Ƥ��� argv[0] �Ǥ��뤳�Ȥ����Ǥˤ狼�äƤ��뤿�ᡢ�����åeݥ���Ȥ���Ѥ��� argv ��ƻ뤷�ޤ���
�֥��ǥ��� (Editor)�ץ�����ɥ��� argv �Υ�����j�ޤ���
�֥ǥХå� (Debug)�� > �ֿ��������åeݥ���� ��New Watch�ˡפ�j�뤫���ޤ��ϱ�����å����ơֿ��������åeݥ���� ��New Watch�ˡפ�j�ޤ����ֿ��������åeݥ���� ��New Watch�ˡץ%����?�ܥå�����j���ƥ����Ȥ�ɽ������ޤ���
��OK�פ�å����ޤ���
�֥�����ɥ� ��Window�ˡ� > �֥����åeݥ���� ��Watches�ˡפ�j�ơ��֥����åeݥ���� ��Watches�ˡץ�����ɥ����ޤ���
argv ��Ÿ�����ޤ���
���Υ��١����Ϥ��ä������Ǥ��礦��argv ������Ƥ��餺���?�����ѿ�Ǥ��뤿�ᡢp�θƤӽФ����饹���å���˻ĤäƤ�����%���ͤ�ַѾ��פ��Ƥ��뤳�Ȥ���դ��Ƥ��$��������������θ���Ǥ��礦��������ꤻ���˷���Ū�˿ʤ�ޤ��礦��
�֥��ƥåץ����С� (Step Over)��
�� 2 ���п��� PC ����� int argc = 0; ���ޤǥ���å����ޤ���
argc �� argv �κ��Ǥ��뤳�Ȥ�����Ǥ��뤿�ᡢƱ�ͤˤ������դ��ơ����Υ����åeݥ���Ȥ��.���ޤ����ޤ������Ͻ���Ƥ��餺�����١����ͤ��ޤޤ�Ƥ����ǽ-�⤢��Τ���դ��Ƥ��$�����
argc �ä˥����åeݥ���Ȥ��.�������ᡢ�֥����åeݥ���� ��Watches�ˡץ�����ɥ��� argv ����ɽ������ޤ���������ɥ��κǽ�ιԤ�ɽ�����������ꤢ��ޤ������åeݥ���Ȥ���ơ���˾�ν��Ǻ����ϤǤ��ޤ������$������ξ�硢���Ѳ�ǽ�ʥ����å��ȥ�å�������ޤ�����̾p ��Name�ˡ���إå!���å�����ȡ������Ȥ���ޤ������Τ褦�����Ƥ����$����ޤǥ���å����ޤ� (�����ȥȥ饤��������)��
�֥��ƥåץ����С� (Step Over)��
��å����ޤ���argc �������ν��줿�ͤ� 0 ��ɤΤ褦��ɽ�����뤫���ܤ��Ƥ��$������;�ϡ��ͤ��d礦���ѹ����줿���Ȥ��Ƥ��ޤ���
���ץꥱ������� strtok() ��ƤӽФ��ޤ����֥��ƥåץ����С� (Step Over)�פ�å����ơ��ؿ�ƥåץ����С��������Ȥ��С��Х롼����Ѥ��ơ��ȡ����� NULL �Ǥ��뤳�Ȥ�ƻ뤷�ޤ���
�ҥ�� - strtok() �ϲ���Ԥ��ޤ�����strtok (3) �ޥ˥奢��ڡ����ȤǤ��ޤ�������ñ�˸$��С�DELIMETERS/ �� 1 �Ĥˤ�äƶ��ڤ�줿�ȡ������ line �ʤɤ�ʸ�����ʬ�䤹��Τ���Ω�dޤ���
�֥��ƥåץ����С� ��Step Over�ˡפ�⤦���٥���å�����ȡ�argv �˥ȡ����������ơ����˥롼�פ� strtok() �ؤθƤӽФ�������ޤ������ƥåץ����С�����ˤĤ�ơ��롼�פˤ����餺�� (����ʾ�ȡ����ʤ�)���դ� NULL �������Ƥ��ޤ������γ����Ƥ⥹�ƥåץ����С�����ȡ����Ф��뤿��θƤӽФ��Τ������ͤȤʤ�ޤ����ꥳ���뤹���硢����ϥץ?��ब����å��夷�����Ǥ���
find() �˸ƤӽФ��ƥåץ����С����뤳�Ȥˤ�äơ��ץ?��ब�����ǥ���å��夹�뤳�Ȥ�%֥�e��å����ޤ����ºݤˤϡ��֥����ʥ���� ��Signal Caught�ˡٹ�ܥå������դ�����ɽ������ޤ���
��p�Τ褦�ˡ��˴����ư����� ��Discard and Pause�ˡפ�å����ޤ���
�������äơ�Interp::dispatch ����ߤ�����ǡ�find() �ؤκǽ�θƤӽФ��ϡ��ºݤ���5�ʾ��Ǥ���
���������Ǥ��ä����⤷��ޤ������פ��$ϡ����ξ��ˤ��Ф䤯���뤳�Ȥ����ȤǤ��������ǡ���ˡ�����$��ޤ��礦��
�ָƤӽФ����ߤ����� (Make Caller Current)��
��å����ޤ���
find() �θƤӽФ������Ȥǹԥ֥졼���ݥ���Ȥ��ڤ��ؤ��ޤ���
�֥֥졼���ݥ���� (Breakpoints)�ץ�����ɥ����ơ�Interp::dispatch () �ؿ�֥졼���ݥ���Ȥ�̵��ˤ��ޤ���
dbxtool �ϡ����Τ褦�˸�����Ϥ��Ǥ���
�����ϡ�2 �ĥ֥졼���ݥ���Ȥ� 141 �Ԥ����ꤵ�졢������ 1 �Ĥ�̵��Ǥ��뤳�Ȥ��Ƥ��ޤ���
�ּ¹� ��Run�ˡ�
��å����ơ֥ץ?�������� ��Process I/O�ˡץ�����ɥ��β��ԥ������ȡ��ץ?��ब find() �ؤθƤӽФ���p����äƽ�λ���ޤ���(�ּ¹� ��Run�ˡץܥ������˺Ƶ�ư���뤫����դ��Ƥ��$������ǥХå����ˤϡ���������ˤ˺Ƶ�ư���ޤ���)
�ҥ�� - ���Ȥ��С��ץ?����ƹ��ۤ����硢�Х��Ф��ƽ�5������ǡ�dbxtool ��λ���ơ��Ƶ�ư����ɬ�פϤ���ޤ��ּ¹� ��Run�ˡץܥ����å�����ȡ�dbx ���ץ?��� (�ޤ��Ϥ��ι�.����) ���ƥ���ѥ��뤵��Ƥ��뤳�ȤФ����ƥ?�ɤ��ޤ���
�������äơ��ǥХå��˴ؤ�������ǻ��Ѥ��䤹���褦�ˡ��ǥ����ȥå�ǡ������餯�Ǿ������� dbxtool ���ñ���ݻ��Τ�����ΨŪ�Ǥ���
����ǤϥХ��Ϥɤ��Ǥ������դ����ӥ����åeݥ���Ȥ�ߤƤߤޤ��礦��
�����ǡ��ǽ�� strtok() �ظƤӽФ��� NULL ���֤����Ĥޤ�Ԥ���Ǥ���ȡ�������äƤ��ʤ��ä����ᡢargv[0] �� NULL �Ǥ��뤹�Ф餷��ľ��Ū�ʥ�פ��.�Ǥ��ޤ���
�ҥ�� - ���Υe塼�ȥꥢ��λĤ�˿ʤ�p�ˡ����ΥХ���5�Ǥ��ޤ�����
�Ǥ��ޤ����ޤ������ԥ��������ˡ���ιԤ��.���ʤ����Ȥ�j��Ǥ��ޤ���
�ޤ��ϡ���ˡ��ǥХå����ǥץ?����¹Ԥ��Ƥ����硢�֥֥졼���ݥ���ȥ�����ץȤ���Ѥ��ƥ����ɤ˥ѥåd�Ŭ�Ѥ���� �����$����褦�ˡ��ǥХå��ǡ֥ѥåd�Ŭ�ѡפ��뤳�Ȥ��Ǥ��ޤ���
��������γ�ȯ�Ԥϡ����ξ����Ф��Ƥ����餯�ƥ��Ȥ���Interp::dispatch() �λĤ���ά���Ƥ���Ϥ��Ǥ���
�ǥ������å����
�嵭����Ǥϡ�Ĵ�Ҥ������ʤ�p�λ��$Ǹ�ư��Ƥ���ץ?������ߤ��������ɤ��ºݤ�ư��Ƥ�����ˡ�ǥ����ɤΰտޤ���Ӥ��ƥ����ɤƥåץ��롼����Ǥ����Ū�ʥǥХå��ѥ�������Ƥ��ޤ���
�����륹�ƥå�ư��ȴƻ�ʤ��ǡ����ľ��Ū�˥Х��Ф��뤳�Ȥ��Ǥ��Ƥ��ޤ��������ºݤϤǤ��Ƥ��ޤ��������ǽ�˥֥졼���ݥ���Ȥ���Ѥ��뤿��ε��Ѥ��äȳؽ�����ɬ�פ�����Ǥ��礦��
���٤ʥ֥졼���ݥ���ȵ��Ѥλ���ˡ
������Ǥϡ��֥졼���ݥ���Ȥ���Ѥ��뤿��Τ����Ĥ��ι��٤ʵ��ѤˤĤ������$��ޤ���
�֥졼���ݥ���ȥ�����Ȥλ���ˡ
�����֥졼���ݥ���Ȥλ���ˡ
��Ω�ĥ֥졼���ݥ���ȥ�����ȤΥԥå���
�����åeݥ����
�֥졼���ݥ���Ⱦ��λ���ˡ
�ݥåפ���Ѥ����ޥ�����Ƽ¹�
��5�ȷ�³��ǽ�λ���ˡ
�����ᡢ����ӥץ?�����ϡ������ǾҲ𤹤���Ȥۤ�Ʊ����Τ���Ѥ��� dbx �Ǽºݤ˸��Ф��줿�Х����ˤ��Ƥ��ޤ���
�����������ɤˤ� in �Ȥ�������ץ����ϥե����뤬�ޤޤ�Ƥ��ꡢ�����Ȥ��ץ?�����ǥХ���ȯ8�����ޤ���in �����Ƥϼ��ΤȤ���Ǥ���
display nonexistent_var # should yield an error display var stop in X # will cause one "stopped" message and display stop in Y # will cause second "stopped" message and display run cont cont run cont cont
p����Ǹ��Ф�����Τ�Ʊ���Х����ФƤ��ޤ�ʤ��褦�ˡ������Ǥ϶�ιԤ��Ƥ���ޤ���
�������ϥե�����ǥץ?����¹Ԥ���ȡ����Ϥϼ��Τ褦�ˤʤ�ޤ���
$ a.out < in > display nonexistent_var error: Don't know about 'nonexistent_var' > display var will display 'var' > stop in X > stop in Y > run running ... stopped in X var = { a = '100' b = '101 c = '<error>' d = '102 e = '103' f = '104' } > cont stopped in Y var = { a = '105' b = '106' c = '<error>' d = '107' e = '108' f = '109' } > cont exited > run running ... stopped in X var = { a = '110' b = '111' error: cannot get value of 'var.c' c = '<error>' d = '112' e = '113' f = '114' } > cont stopped in Y var = { a = '115' b = '116' error: cannot get value of 'var.c' c = '<error>' d = '117' e = '118' f = '119' } > cont exited Goodby
���ν��Ϥơ�¿���ʤȻפ��뤫�⤷��ޤ���������Ǥϡ��ץ?��बĹ���ʣ���ʤ��ᥳ���ɤ� 1 �Ԥ��ĸ��Ƥ����פ��뤳�Ȥ�����ʾ��˻��Ѥ��٤���ˡ����⤹�뤳�Ȥ���ˤ��Ƥ��ޤ���
c �ե�����ɤ��ͤ�ɽ������ս�ǡ��ͤ� <error> �ˤʤäƤ��뤳�Ȥ����ܤ��Ƥ��$������ե�����ɤ���5�ʥ��ɥ쥹���ޤޤ�Ƥ���ȡ����Τ褦�ʾ��ȯ8���뤳�Ȥ�����ޤ���
����
�ץ?���� 2 �ټ¹Ԥ������ˡ��ǽ�μ¹Ի��˼��$��ʤ��ä��ɲäΥ��顼��å���������$��Ƥ��뤳�Ȥ����ܤ��Ƥ��$�����
error: cannot get value of 'var.c'
error() �ؿ�ϡ�����ξ�ˤ����륵�����ȥ��顼��å��������ѿ� err_silent ����Ѥ��ޤ������Ȥ��С����顼��å�������ɽ������ΤǤϤʤ���ɽ�����ޥ�ɤξ��ˡ����꤬ c = '<error>' �Ȥ���ɽ������ޤ���
���ƥå� 1: �Ƹ�-
�ǽ�Υ��ƥåפϡ��ǥХå��������åȤåȥ��åפ����ּ¹� ��Run)�� ��å����ƥХ����ñ�˷����֤����Ȥ��Ǥ���褦�����ꤹ�뤳�ȤǤ���
���Τ褦�˥ץ?���ΥǥХå��Ϥ��ޤ���
�ץ?������ѥ��뤷�Ƥ��ʤ����ϡ��֥ץ?������ �����$˽��äƼ¹Ԥ��Ƥ��$�����
�֥ǥХå� ��Debug�ˡ� > �ּ¹Բ�ǽ�ե������ǥХå����ޤ� ��Debug Executable�ˡפ�j�ޤ���
�ּ¹Բ�ǽ�ե������ǥХå����ޤ� ��Debug Executable�ˡץ%����?�ܥå����ǡ��¹Բ�ǽ�ե�����ؤΥѥ��Ȥ��뤫�����Ϥ��ޤ���
�ְ�� ��Arguments�ˡץե�����ɤǡ����Τ�Τ����Ϥ��ޤ���
< in
�¹Բ�ǽ�ե�����Υѥ��Υǥ��쥯�ȥ���ʬ��ּ¹ԥǥ��쥯�ȥ� ��Run Directory�ˡץե�����ɤ˥��ԡ���ڡ����Ȥ��ޤ���
�֥ǥХå� ��Debug�ˡפ�å����ޤ���
���¤ξ�ǡ��ְ�� ��Arguments�ˡץե�����ɤޤ��ϡִĶ� (Environment)�ץե�����ɤ�Ʊ�ͤ����Ϥ�������礬����ޤ���
�֥ǥХå� ��Debug�ˡ� > �ָ��ߤΥ��å��������� (Configure Current Session)�פ�j�ơ�����Υץ�ѥƥ��٤��ѹ��Ǥ��ޤ���
�ץ?����ǥХå�����Ȥ��ˡ�dbxtool ���ǥХå��������åȤ��.���ޤ����֥ǥХå� ��Debug�ˡ� > �ֺǶ�Ԥʤä��ǥХå� ��Debug Recent)�פ�j��������Ū�μ¹Բ�ǽ�ե������j�ơ����Ʊ���ǥХå��������ѤǤ��ޤ���
dbx ���ޥ�ɥ饤�餳���Υץ�ѥƥ���¿�������ꤹ�����ñ�ʾ�礬����ޤ��������ϥǥХå��������å�����˳�Ǽ����ޤ���
�������Ƥ�¿������Ū�ϡ����ޤ��ޤ���֥֥졼���ݥ���Ȥǡַ�³ ��Continue�ˡפ�å�����ɬ�פʤ����ּ¹� ��Run�ˡפ�å����뤳�Ȥˤ�äơ���̣�ξ��˾�˰�ư�Ǥ���褦�ˡ��֥졼���ݥ���Ȥ��ɲä���ˤĤ���ưפʺƸ�-��ݻ�뤳�ȤǤ���
���ƥå� 2:�ǽ�Υ֥졼���ݥ����
���顼��å���������Ϥ�����ˤϡ�error() �ؿ���˥֥졼���ݥ���Ȥ��֤��ޤ��礦�����Υ֥졼���ݥ���Ȥϡ�33 ���ܤιԥ֥졼���ݥ���ȤȤʤ�ޤ���
����礭�ʥץ?���Ǥϡ����Ȥ��С�dbx ������ ��Dbx Console�ˡץ�����ɥ��ǡ����Τ褦�����Ϥ��ơ֥��ǥ��� ��Editor�ˡץ�����ɥ��θ��ߤδؿ���ñ���ѹ��Ǥ��ޤ���
(dbx) func error
��٥�!����ȥ饤�פˡ�func ���ޥ�ɤǸ��Ф��줿���פ�������ޤ���
33 ���ܤξ�Ρ֥��ǥ��� ��Editor�ˡץ�����ɥ��κ��ޡ������å����ơ��ԥ֥졼���ݥ���Ȥ��.���ޤ���
�ּ¹� ��Run�ˡ�
��å����ƥץ?����¹Ԥ����֥졼���ݥ���Ȥ�ҥåȤ���ȡ������å��ȥ졼����ɽ������ޤ��� in �ե�����Υ��ߥ�졼�Ȥ��줿���ޥ�ɤˤ�ä�ȯ�Ԥ���Ƥ��륨�顼��å�������ɽ������ޤ���
> display var # should yield an error
error() �ؤθƤӽФ������ꤵ�줿ư��Ǥ���
�ַ�³ ��Continue�ˡ�
��å����ƥץ?�����³�����դ����ӥ֥졼���ݥ���Ȥ�ҥåȤ��ޤ��������ͽ��ʤ����顼��å����������ޤ���
���ƥå� 3:�֥졼���ݥ���ȥ������
���ޥ�ɤˤ��֥졼���ݥ���Ȥκǽ�ΥҥåȤθ�ǡ��ַ�³ ��Continue�ˡפ�å�����ɬ�פʤ����¹Ԥ��Ȥ˷����֤��Ƥ��ξ������夹����褤�Ǥ��礦��
> display var # should yield an error
�ץ?���ޤ������ϥ�����ץȤ��Խ����ơ��ǽ������������ɽ�����ޥ�ɤ���Ǥ��ޤ������$�����Ȥ��Ƥ�����������Ͻ��ϡ����ΥХ���Ƹ����븰�Ȥʤ��ǽ-�����뤿�ᡢ����𤵤��ʤ��褦�ˤ��ޤ��礦��
���Υ֥졼���ݥ���Ȥ����夹�� 2 ���ܤ˶�̣�����뤿�ᡢ������Ȥ� 2 �����ꤷ�ޤ��礦��
�֥֥졼���ݥ���� ��Breakpoints�ˡץ�����ɥ��ǡ��֥졼���ݥ���Ȥ���å����ơ��֥������ޥ��� ��Customize�ˡפ�j�ޤ���
�֥֥졼���ݥ���Ȥ����ޥ��� ��Customize Breakpoint�ˡפǡ��֥����ξ���� ��Count Limit�ˡץե�����ɤˡ�2�פ����Ϥ��ޤ���
��OK�פ�å����ޤ���
����ǡ���̣�Τ�����˷����֤�����Ǥ��ޤ���
���ƥå� 4:�����֥졼���ݥ����
���ξ�硢������� 2 ��j�뤳�Ȥϴ�ñ�Ǥ���������������ߤ˶�̣�Τ�����ϲ��٤�ƤӽФ�����礬����ޤ�����ǡ�Ŭ�ڤʥ�������ͤ�ɤΤ褦�˴�ñ��j��Ǥ��뤫�狼��Ǥ��礦�����������ߡ���̣�Τ���ƤӽФ��ǤΤߡ�error() ����ߤ����̤���ˡ��Ĵ�����ޤ��礦��
error() ��Υ֥졼���ݥ���Ȥ�p�Τ褦�ˡ֥֥졼���ݥ���Ȥ����ޥ��� ��Customize Breakpoint�ˡפ��ơ��֥����ξ���� ��Count Limit�ˡפΥɥ�åץ%���ꥹ�Ȥ���־����� ��Always stop�ˡפ�j�ơ��֥졼���ݥ���ȥ�����Ȥ�̵��ˤ��ޤ���
�����ǡ��ּ¹� ��Run�ˡפ�å����ơ�error() �� 2 ����ߤ���Ȥ��ˡ������å��ȥ졼������դ�ʧ���ޤ���1 ���ܤϼ��Τ褦��ɽ������ޤ���
![�ָƤӽФ������å� ��Call Stack�ˡץ�����ɥ�](figures/call_stack_1.gif)
2 ���ܤϼ��Τ褦��ɽ������ޤ���
![�ָƤӽФ������å� ��Call Stack�ˡץ�����ɥ�](figures/call_stack_2.gif)
runProgram (�ե졼�� [7]) ����Ǹ�ȸƤФ��Ȥ��ˡ����Υ֥졼���ݥ���Ȥ���ߤ���褦��Ĵ0���ޤ��������Ԥ��ˤϡ��դ����ӡ֥֥졼���ݥ���Ȥ����ޥ��� ��Customize Breakpoint�ˡץ%����?�ܥå������ơ��ֻ���ؿ��� ��While In�ˡץե�����ɤ� runProgram �����ꤷ�ޤ���
![�֥֥졼���ݥ���Ȥ����ޥ��� ��Customize Breakpoint�ˡץ�����ɥ�](figures/bounded_breakpoint.gif)
�����ǡ��Ƥӡ���̣�Τ���ݥ���Ȥ˷����֤������̤�����Ǥ��ޤ���
���ƥå� 5: �����Ĵ��
���פʥ��顼��å�������ȯ�Ԥ���Ƥ���Τϲ��ΤǤ������$餫�ˡ� err_silent �� > 0 �Ǥ��뤿��Ǥ����Х롼��ɾ�d���Ѥ��� err_silent ���ͤƤߤޤ��礦����������� 31 ���ܤ� err_silent ���֤��ơ�ɽ��������ͤ��Ե����ޤ���
![err_silent = 0 �ΥХ롼��ɾ�d�ɽ�����줿�֥��ǥ��� ��Editor�ˡץ�����ɥ�](figures/err_silent_is_bad.gif)
err_silent �����ꤵ�������ǧ���뤿��ˡ������å��˽����ޤ��礦���ָƤӽФ����ߤ����� (Make Caller Current)�� �� 2 ��å������ evaluateField() �����夷�����Ǥ� evaluateFieldPrepare() ��ƤӽФ��Ƥ��ơ�err_silent
�����Ƥ����ǽ-�Τ���ʣ���ʴؿ�ߥ�졼�Ȥ��ޤ���
![evaluateField �˥�٥�!����ȥ饤�פ�ɽ�����줿�֥��ǥ��� (Editor)�ץ�����ɥ�](figures/at_evaluateField.gif)
�ָƤӽФ����ߤ����� ��Make Caller Current�ˡפ�⤦���٥���å�����ȡ�printField() �����夷�ޤ��������� err_silent ����䤵��Ƥ��ޤ���printField() �Ϥ��Ǥ� printFieldPrepare() ��ƤӽФ��Ƥ��ơ�err_silent �����Ƥ����ǽ-�Τ���ʣ���ʴؿ�⥷�ߥ�졼�Ȥ��ޤ���
![printField �˥�٥�!����ȥ饤�פ�ɽ�����줿�֥��ǥ��� ��Editor�ˡץ�����ɥ�](figures/at_printfield.gif)
err_silent++ ����� err_silent-- ���ɤΤ褦�ˤ����Ĥ��Υ����ɤ�Ϥफ����դ��Ƥ��$�����
printFieldPrepare() �ޤ��� evaluateFieldPrepare() �Τ����줫�ǡ�err_silent ���ְ�äƤ��뤫���ޤ��ϥ���ȥ?�뤬 printField() �����夹��Ȥ��ˤ��Ǥ˴ְ�äƤ��뤳�Ȥ�����ޤ���
printField () �˥֥졼���ݥ���Ȥ��֤����Ȥˤ�ä� printField() �ؤθƤӽФ�p�夬�ְ�äƤ��뤫�ɤ������狼��Ǥ��礦��
���ƥå� 6: ���¿���Υ֥졼���ݥ���ȥ������
printField() �˥֥졼���ݥ���Ȥ����ꤷ�ޤ���
printField() ��j���ֿ����֥졼���ݥ���� (New Breakpoint)�פ���å����ơ�j�ޤ���
�������֥졼���ݥ���ȥ����פ���p��j�졢�ִؿ� (Function)�ץե�����ɤ� printfield �ǻ�p���Ϥ���Ƥ��ޤ���
��OK�פ�å����ޤ���
�ּ¹� ��Run�ˡ�
��å����ޤ����֥졼���ݥ���Ȥ�ҥåȤ�����ϡ��ǽ�μ¹Ի����ǽ�����������Ӻǽ�Υե������ var.a ��Ǥ���err_silent �� 0 �ǡ���������ꤢ��ޤ���
�ַ�³ ��Continue�ˡפ�å����ޤ���err_silent �ϰ�s�Ȥ������ꤢ��ޤ���
�դ����ӡַ�³ ��Continue�ˡפ�å����ޤ���err_silent �ϰ�s�Ȥ������ꤢ��ޤ���
����� printField() �ؤθƤӽФ���ã�������η�̡����פʥ��顼��å�������ȯ8����ޤǤ��Ф餯������ޤ���printField �֥졼���ݥ���Ȥǥ֥졼���ݥ���ȥ�����Ȥ���Ѥ���ɬ�פ�����ޤ���������������Ȥ�ɤΤ褦�����ꤷ����褤�Ǥ��礦�������δ�ñ����Ǥϡ�ɽ������Ƥ���¹ԡ���ߡ�����ӥե�����ɤ��褦�Ȥ��ޤ������ºݤˤ�����ͽ¬��ǽ�ǤϤʤ���ǽ-������ޤ������$���������Ȥ�Ⱦ��ưŪ�Ǥ��뤫���¬������ˡ������ޤ���
printField() ��Υ֥졼���ݥ���ȤΡ֥֥졼���ݥ���Ȥ����ޥ��� ��Customize Breakpoint�ˡפ��ơ��֥����ξ���� (Count Limit)�ץե�����ɤ� infinity �����ꤷ�ޤ���
��������ϡ����Υ֥졼���ݥ���Ȥ���ߤ��ʤ����Ȥ��̣���ޤ������$�����s�Ȥ��ƿ�Ƥ��ޤ���
���λ��$ǡ��֥֥졼���ݥ���� ��Breakpoints�ˡץ�����ɥ��ˡ�������ȤʤɤΤ��¿���Υץ�ѥƥ���ɽ�����뤳�Ȥ�˾�ޤ����Ǥ��礦��
�֥֥졼���ݥ���� ��Breakpoints�ˡץ�����ɥ��α���Ѥˤ����ɽ�����ܤ��ѹ� (Change Visible Columns)�ץܥ���
��å����ޤ���
�֥������ (Count)�ס���)�� (Limit)�ס�����ӡֻ���ؿ��� (While In)�פ�j�ޤ���
��OK�פ�å����ޤ���
�ץ?����Ƽ¹Ԥ��ޤ���error() ��Υ֥졼���ݥ���ȡ�runProgram() �ˤ�äƶ������դ�����֥졼���ݥ���Ȥ�ҥåȤ��ޤ���
�����ǡ�printField() ��Υ֥졼���ݥ���ȤΥ�����ȤƤߤޤ��礦��
15 �ǡ����ʤ�a��ۤ���������ȤǤ���
�֥����ξ���� ��Count Limit�ˡ���Υɥ�åץ%���ꥹ�Ȥ�å����ơ��ָ��ߤΥ�������ͤ���� (Use current Count value)�פ�j�����ߤΥ�����Ȥ��ξ�¤�ž��ơ����ԥ������ޤ���
�����ǡ�printField() ����ߤ���ץ?����¹Ԥ���ȡ��Ǹ夬���פʥ��顼��å�������p�˸ƤӽФ���ޤ���
���ƥå� 6: ������ϰϤ���ꤹ��
�Х롼��ɾ�d���Ѥ��ơ��դ����� err_silent �����ޤ������ߤ� -1 �Ǥ���printField() ����ã����p�ˡ��� �Ĥ� err_silent-- ��ɬ�װʾ�ˡ����뤤�� �� �Ĥ� err_silent++ ��ɬ�װʲ��˼¹Ԥ��줿�Ȥ�����ǽ-�ϺǤ�⤤�Ȥ����ޤ���
err_silent �Τ��Υߥ��ޥådΥڥ���ɤΤ褦�˸���Ǥ��ޤ�����������Τ褦�ʾ����ʥץ?���Ǥϡ���տ��������ɸ����ˤ�äƹԤ����Ȥ��Ǥ��ޤ������������礭�ʥץ?���Ǥϡ�ˡ���ʿ�Υڥ��������ǽ-������ޤ���
err_silent++; err_silent--;
�ߥ��ޥådΥڥ�����®���������ˡ�Ȥ��ơ������åeݥ���Ȥ����Ѥ�����ޤ���
�ҥ�� - err_silent++; ����� err_silent--; �Υߥ��ޥådΥ��åȤǤϤʤ���err_silent �Υ���ƥ�Ĥ�������5�ݥ��Ǥ�����⤢��ޤ��������åeݥ���ȤϤ��Τ褦�������Ȥ館��Τˤ����Ū�Ǥ��礦��
���ƥå� 7: �����åeݥ���Ȥλ���ˡ
err_silent �ǥ����åeݥ���Ȥ��.����ˤϡ����μ��˽����ޤ���
err_silent �ѿ��j���ֿ����֥졼���ݥ���� (New Breakpoint)�פ���å����ơ�j�ޤ���
������������֥졼���ݥ���Ȥμ�������ꤷ�ޤ��������� (Settings)�ץ�������ɤΤ褦���ѹ����졢�֥��ɥ쥹 (Address)�ץե�����ɤ��ɤΤ褦�� & err_silent �Ǥ��뤫��դ��Ƥ��$�����
�֤��� (When)�ץե�����ɤΡָ� (After)�פ�j�ޤ���
�ֱ黻 ��Operation�ˡץե�����ɤΡֽ��� ��Write�ˡפ�j�ޤ���
��OK�פ�å����ޤ���
�����ǥץ?����¹Ԥ��ޤ���init() ����ߤ��ޤ��������Ǥ�����ʤ��Τ褦�Ǥ����Ĥޤꡢerr_silent �� 1 ����ʬ���졢���θ�¹Ԥ���ߤ��ޤ�����
�ַ�³ ��Continue�ˡפ�å����ޤ����դ����� init() ����ߤ��ޤ���
�դ����ӡַ�³ ��Continue�ˡפ�å����ޤ����դ����� init() ����ߤ��ޤ���
�դ����ӡַ�³ ��Continue�ˡפ�å����ޤ����դ����� init() ����ߤ��ޤ���
�դ����ӡַ�³ ��Continue�ˡפ�å����ޤ��������ǡ�stopIn() ����ߤ��ޤ��������Ǥ�����ʤ��Τ褦�ǡ��Ĥޤ� -1s �ǤϤ���ޤ���
err_silent �� -1 �����ꤵ���ޤǤ��Ф餯���֤������뤳�Ȥ�����ޤ������볦�����Ǽºݤ� -1 ���Ѥ�ä��ִ֤�ƨ���ޤ��ȡַ�³ (Continue)�ץܥ������⥯��å��������⤢��ޤ�����������ˤ褤��ˡ������ޤ���
���ƥå� 8:�֥졼���ݥ���Ȥξ��
�����åeݥ���Ȥ˾����ɲä���ˤϡ����μ��˽����ޤ���
�֥֥졼���ݥ���� ��Breakpoint�ˡץ�����ɥ��ǡ��ָ� (After)�פΡֽ��� (write)�ץ֥졼���ݥ���Ȥ���å����ơ��֥������ޥ��� ��Customize�ˡפ�j�ޤ���
�ָ� (After)�פ��֤Ȥ� (When)�ץե�����ɤ�j��Ƥ��뤳�Ȥ��ǧ���ޤ���
�ҥ�� - err_silent ���ͤ������ѹ����줿���Τꤿ�����ᡢ�ָ� (After)�פ�j�뤳�ȤϽ��פǤ���
�־�� (Condition)�ץե�����ɤ� err_silent == -1 �����ꤷ�ޤ���
��OK�פ�å����ޤ���
����ǥץ?����Ƽ¹Ԥ��ޤ���checkThings() ����ߤ��ޤ�������� err_silent �� -1 �����ꤵ��Ƥ���ǽ�Ǥ����ޥåe��Ƥ��� err_silent++ ��õ���ˤĤ�ơ��Х��Τ褦�˸������Τ��ǧ���ޤ���err_silent �ϴؿ�� else ��ʬ�ǤΤ���ʬ����ޤ���
![checkThings ����ߤ����ץ?����ɽ������֥��ǥ��� ��Editor�ˡץ�����ɥ�](figures/thebug.gif)
����Ϥ��ʤ���õ���Ƥ���Х��Ǥ��礦����
���ƥå� 9:�����å���ݥåפ��뤳�Ȥˤ����Ǥγ�ǧ
�ؿ�� else �֥�å�����ºݤ˿ʤ�Ǥ��뤳�Ȥ�%֥�e��å����ޤ��礦��
�����Ԥ� 1 ����ˡ�ϡ�checkThings() �ǥ֥졼���ݥ���Ȥ����ꤷ���ץ?����¹Ԥ��뤳�ȤǤ�����������checkThings() �ϲ��٤�ƤӽФ�����ǽ-������ޤ���checkThings() ��5�����ƤӽФ���ã����ˤϥ֥졼���ݥ���ȥ�����Ȥޤ��϶����֥졼���ݥ���Ȥ���ѤǤ��ޤ������Ƕ�¹Ԥ��줿��Τ�Ƽ¹Ԥ��뤹�Ф䤤��ˡ������ޤ���
�֥ǥХå� ��Debug�ˡ� > �֥����å� ��Stack�ˡ� > �ֺǾ�̤θƤӽФ���ݥå� (Pop Topmost Call)�פ�j�ޤ���
�ҥ�� - �ֺǾ�̤θƤӽФ���ݥå� (Pop Topmost Call)�פ����٤Ƥ��ᤵ�ʤ����Ȥ���դ��Ƥ��$������äˡ�err_silent ���ͤϤ��Ǥ˴ְ�äƤ��ޤ���������������ϥǡ����ǥХå����饳��ȥ?��ե?�ǥХå��ޤ��ڤ��ؤ��Ƥ��뤿�ᡢ����ʤ��Ϥ��Ǥ���
checkThings() �ؤθƤӽФ��˵��դ��ޤ����ºݡ��ץ?���ξ��֤ϡ�checkThings() �ؤθƤӽФ���ޤ�Ԥκǽ���ᤵ��Ƥ��ޤ���
�����ǡ��֥��ƥåץ��� (Step Into)�� ��å������դ����� checkThings() ���ƤӽФ���뤿�Ӥ˴ƻ뤷�ޤ��� checkThings()() �ƥåץ��롼����ˤĤ�ơ��ºݤ˥ץ?���� if �֥�å���¹Ԥ��뤳�Ȥ��ǧ�Ǥ��ޤ���err_silent ����ʬ���줺��-1 �˸��餵��ޤ���
![checkThings �� if ������������ߤ����ץ?����ɽ������֥��ǥ��� ��Editor�ˡץ�����ɥ�](figures/if_side.gif)
�ץ?��ߥ��顼�Ф��Ƥ���褦�˸����ޤ����������������ȥ�ץ�e��å����ޤ��礦��
���ƥå� 10:���Ǥ�˳�ǧ���뤿��ν�5�λ���ˡ
�����ɤ�Ŭ�ڤ˽�5�����Х����ºݤ˲�褵�줿���Ȥ��ǧ���ޤ���
err_silent++ �� if ʸ�ξ�����褦�˥����ɤ�5���ޤ�����̤ϼ��Τ褦�ˤʤ�ޤ���
�֥ǥХå� ��Debug�ˡ� > �֥������ѹ���Ŭ�� (Apply Code Changes)�פ�j�ޤ���
printField �֥졼���ݥ���Ȥ���ӥ����åeݥ���Ȥ�̵��ˤ��ޤ�����error() �Υ֥졼���ݥ���Ȥ�ͭ��ʤޤޤˤ��ޤ���
�ץ?����Ƽ¹Ԥ��ޤ���
error() �ǥ֥졼���ݥ���Ȥ�ҥåȤ��뤳�Ȥʤ��ץ?��ब��λ�������Ϥ�����ɤ���Ǥ��뤳�Ȥ���դ��ޤ��礦��
![�֥ץ?�������� ��Process I/O�ˡץ�����ɥ�](figures/correct_output.gif)
�ǥ������å����
�嵭�ϡ���p�Ȥ����֥֥졼���ݥ���Ȥȥ��ƥå�ư��λ���ˡ���ν��������$����Τ�Ʊ���ѥ�������Ƥ��ꡢ�ĤޤꡢĴ�Ҥ������ʤ�p�λ��$θ�ư��ץ?������ߤ����ºݤ˥����ɤ�ư�����ˡ�ǥ����ɤΰտޤ���Ӥ��ƥ����ɤƥåץ��롼���ޤ���������ϡ�Ĵ�Ҥ������ʤ�p�˥ݥ���ȤФ��뤳�Ȥ�������Ϣ���Ƥ��ޤ���
�֥졼���ݥ���ȥ�����ץȤ���Ѥ��ƥ����ɤ˥ѥåd�Ŭ�Ѥ���
�֥֥졼���ݥ���Ȥȥ��ƥå�ư��λ���ˡ�� �ǡ���ιԤ� NULL �κǽ�Υȡ������8.����SEGV �θ���Ȥʤ�Х��Ф��ޤ����������ˤ��Ф䤯��褹����ˡ������ޤ���
p����Ǻ�.�����֥졼���ݥ���ȤΤ��٤Ƥ���ޤ���
�ּ¹Բ�ǽ�ե������ǥХå����ޤ� (Debug Executable)�ץ%����?�ܥå����� <in ������ޤ���
interp.cc �� 130 ���ܤιԥ֥졼���ݥ���Ȥ��ڤ��ؤ��ޤ���
�֥֥졼���ݥ���� ��Breakpoints�ˡץ�����ɥ��ǡ��d礦�ɺ�.�����֥졼���ݥ���Ȥ���å��� (��꿷�����֥졼���ݥ���Ȥϰ��ֲ����ɲä����)���֥������ޥ��� ��Customize�ˡפ�j�ޤ���
�֥֥졼���ݥ���Ȥ����ޥ��� ��Customize Breakpoint�ˡץ%����?�ܥå����Ρ��־�� ��Condition�ˡץե�����ɤ� token == 0 �����Ϥ��ޤ���
�֥�������� (Action)�ץɥ�åץ%���ꥹ�Ȥ���֥�����ץȤμ¹� ��Run Script�ˡפ�j�ޤ���
�֥�����ץ� ��Script�ˡץե�����ɤǡ�assign token = line �����Ϥ��ޤ���
�ҥ�� - assign token = "dummy" �Ϥɤ��Ǥ�����dbx �ϥǥХå��ץ?���� dummy ʸ���������Ƥ뤳�ȤϤǤ��ޤ����ΰ���� line �� "" �������Ȥ��Τ��Ƥ��ޤ���
�%����?�ܥå����ϼ��Τ褦��ɽ�������Ϥ��Ǥ���
��OK�פ�å����ޤ���
�����ǡ��ץ?����¹Ԥ�������å���ǤϤʤ�����ιԤ����Ϥ���ȡ����Τ褦��ư��ޤ���
![�֥ץ?�������� ��Process I/O�ˡץ�����ɥ�](figures/patching_2.gif)
dbxtool �� dbx �����줿���ޥ�ɤ�ɽ���������ϤɤΤ褦������˵�ǽ����Ǥ��礦����
when at "interp.cc":130 -if token == 0 { assign token = line; }