<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet type="text/xsl" href="/lib/xsl/devedge-1.00/article_ja.xsl"?>
<!--     [ 和訳履歴 ]
訳者: dynamis
2003/06/17: 初版(2003/05/02)の和訳をやっと完了。かなり遅くなりました。(^^;
2003/06/20: Venkman-JPでのスクリーンショットの取り直しも含めてひとまず和訳完成。

-->
<nde:article 
  url="/viewsource/2003/venkman/01/" 
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:nde="http://devedge.netscape.com/2002/de" 
  xmlns:ent="http://devedge.netscape.com/2003/ent"
  xml:lang="ja">

  <nde:header>

    <nde:title>
       Venkman のブレークポイント使用法
    </nde:title>

    <nde:category>
      Article
    </nde:category>

    <nde:pubdate year="2003" month="05" day="02"/>
    <nde:summary>
      この記事には JavaScript におけるブレークポイントの説明と Venkman JavaScript デバッガでブレークポイントを設定および確認する方法が書かれています。
    </nde:summary>
    
    <nde:channels>
      <nde:channel id="viewsource"/>
      <nde:channel id="javascript"/>
    </nde:channels>
    
    <nde:keywords>
      JavaScript, Venkman, デバッグ, ウェブアプリケーション開発
    </nde:keywords>
    
    <nde:authlist>
      <nde:author>
        <nde:authname>Robert Ginda</nde:authname>
        <nde:authaffil>Netscape Communications</nde:authaffil>
      </nde:author>
      <nde:author>
        <nde:authname>Ian Oeschger</nde:authname>
        <nde:authaffil>Netscape Communications</nde:authaffil>
      </nde:author>
      <nde:author>
        <nde:authname>dynamis</nde:authname>
        <nde:authrole>translation</nde:authrole>
        <nde:authaffil>Dyna Infomation Library</nde:authaffil>
        <nde:authfeedback>http://skillup.jp/venkman/</nde:authfeedback>
      </nde:author>
    </nde:authlist>

  </nde:header>

  <nde:head>
   <style type="text/css">
      .chunk { border: 10px; padding: 40px; border: 1px solid lightgray; }
      .what {
              margin-left: 10px;
              font-size: larger;
              font-weight: bold;
          }

      .why {
              margin-left: 25px;
          }

      .left-floating-figure {
              float: left;
              margin: 10px 10px 10px 10px;
              text-align: center;
              font-size: small;
              font-weight: bold;
          }
      .floating-figure {
              float: right;
              margin: 10px 10px 10px 10px;
              text-align: center; 
              font-size: small;
              font-weight: bold;
          }

      .figure-table {
              font-size: smaller;
              border: 1px solid;
      }
      /* for Japanese Translation */
      #TransNote {
              margin: 1em 2em;
              background: #EEEEEE;
              border: solid 1px #000000;
              font-size: 90%;
          }

      #TransNote p {
              margin: 0.5em;
          }

      p.comment {
              margin-left: 2em;
              margin-right: 2em;
          }

      .comment {
              color: #20A040;
              font-size: 80%;
          }

      h1, h2, h3, h4 {
              clear: both;
              margin-top: 2em;
          }

      h2, h3 {
              margin-left: 3em;
          }
   </style>
  </nde:head>

  <nde:content>

<div id="TransNote">
<p>この和訳記事は Mozilla に訳者 dynamis が作成している日本語版 Venkman をインストールした環境を使って書かれており、文中の訳語や和訳と同時に撮り直したスクリーンショットなどは全てそれに応じたものとなっております。従って、内容的な影響は一切ないものの、細部では原文と異なる所がありますのでご了承ください。<br/>
最新の日本語版 Venkman やその他 Venkman に関する日本語情報については <a href="http://skillup.jp/venkman/">Venkman-JP</a> をご覧ください。</p>
</div>

<p>この記事は <a href="/viewsource/2002/venkman/01/index_ja.html">Venkman - Netscape 7.x の新しい JavaScript デバッガ</a> から始まる一連の Venkman 記事の続きです。</p>

<p>いずれの言語であれ、<em>ブレークポイント</em> の設定はデバッグの基本作業として挙げられます。ブレークポイントとは、コード中で実行が停止されるところのことです。 Venkman のようなデバッグツールによってブレークポイントを設定すると、変数、オブジェクト或いは他の実効状態を確認する為に一時停止できるようになるのです。</p>

<p>この記事には JavaScript におけるブレークポイントの説明と Venkman でブレークポイントを設定および確認する方法が書かれています。この記事は 2つの主節に分けて書かれています:</p>

<ul>
  <li><a href="#basic">基本的ブレークポイント</a></li>
  <li><a href="#advanced">高度なブレークポイント</a></li>
</ul>
<a name="basic"></a>
<h2 id="basicbreakpoints">基本的ブレークポイント</h2>

<p>停止ボタンや <tt>デバッガ</tt> キーワードも JavaScript デバッガの便利な機能ですが、コードの奥深くまでデバッグするのであれば <ent:mdash/> 特に自身が記述しトラブルシューティングの責任もあるコードであれば <ent:mdash/> ブレークポイントが必要となります。</p>

<ul>
  <li><a href="#types">ブレークポイントの種類</a></li>
  <li><a href="#set">ブレークポイントの設定</a></li>
  <li><a href="#debug">ブレークポイントによるデバッグ</a></li>
  <li><a href="#clear">ブレークポイントの削除</a></li>
</ul>

<a name="types"></a>
<h3>ブレークポイントの種類</h3>

<p>Venkman  には二種類のブレークポイントがあります。まず一つ目の、最も一般的なものは、"実<span class="comment">(hard)</span>" ブレークポイントというものです。実ブレークポイントはコンパイル済関数の擬似コードに含まれる、実際のトラップ命令のことを表しています。実ブレークポイントは現在ブラウザに "存続中" である関数の中にしか存在できません。実ブレークポイントはプログラムの実行を実際に停止させるもののことです。</p>

<p>二つ目のブレークポイントである、"予定<span class="comment">(future)</span>" ブレークポイントというのは、可能な限り速やかに実ブレークポイントを設定するという Venkman による約束を表します。予定ブレークポイントは、まだコンパイルされていないスクリプト中で停止したい時に使用されます。予定ブレークポイントの最も一般的な用法は、"トップレベル" スクリプト(全ての関数の外側で実行されるスクリプト) 或いはページの onLoad イベント中で実行されるスクリプト中で停止するものです。予定ブレークポイントの URL にマッチするスクリプトが読み込まれ、指定行に実行可能なコードが含まれると、Venkman は自動的に実ブレークポイントを設定します。<span class="comment">([訳註] 原文では予定ブレークポイントを設定すると書かれていますが、誤りでしょう)</span></p>

<p>この違いを除き、Venkman のブレークポイントは他の多くのデバッガでのブレークポイントと同様に機能します。ソースコードビューの左余白部に表示される負号<!-- dots とあるが、実際はマイナス記号 -->はその行が実行可能なコードを含んでおり、実ブレークポイントを設定できるところであることを示しています。</p>

<blockquote>
<img src="ja_venkdot.png"/>
<br /><b>図 1. Venkman ソースコードビューでの実行可能コード行</b>
</blockquote>

<a name="set"></a>
<h3>ブレークポイントの設定</h3>

<p>ソースコードビューにあるこれらの負号をクリックするとその行にブレークポイントを設定できます。 Venkman は当該行が実行される<em>前に</em>停止します。ブレークポイントが設定されると、余白部は図 2 にあるように "B" という文字に変わります。このブレークポイントの設定後にこのコードを再度実行すると Venkman は 112 行目<!-- 原文の行数は誤りでしょう -->で停止します。</p>

<blockquote>
<img src="ja_venkbreak.png" />
<br /><b>図 2. ブレークポイントの設定</b>
</blockquote>

<p>Venkman は一つ以上のブレークポイントが設定されていることを、設定されているファイルの横に赤い点を表示させることで、読み込まれているスクリプトビューでも示します。コードが停止される関数の開始行番号も横に表示されます。<!-- 各非接続用法関係代名詞以降は追加説明的なものだから訳もそれらしくした --></p>

<blockquote>
<img src="ja_venkscriptsdot.png" />
<br /><b>図 3. 読み込まれているスクリプトビュー中のブレークポイントが設定されたファイル</b>
</blockquote>

<a name="debug"></a>
<h3>ブレークポイントによるデバッグ</h3>

<p>ブレークポイントを設定することは、実行環境に関する情報を Venkman (或いは何であれご利用のデバッガ) が表示できるようにすることになります。スクリプトやソフトウェアプログラムをデバッグする上で最も重要なものとして、スクリプトの実行過程で変化する変数 <ent:mdash/>関数は値、エラー、カウンタ、変数のスコープを返す<ent:mdash/> を確認できることが挙げられます。<!-- as 以降は理由だが単に説明として訳、aspect はデバッグの重要な側面→デバッグの仕方で重要なところ→デバッグに於いて大事なもの…と解釈 --></p>

<p>例えば図 1 の <tt>DownloadButton</tt> 関数では、ダウンロードボタンによってどの種のビルドが得られるようにするか判断する為に変数 <tt>type</tt> を使用しています。プラットフォームは Windows であると関数が判断したときにその変数が調べられる行である、112行目にブレークポイントを設定してみます。そしてメインブラウザでウェブページを再読込すると、DownloadButton 関数に入った時に実行が停止されることを確認できます。そこで停止し、<tt>type</tt> 変数の値が "milestone" であると ローカル変数ビューに表示されるのです。<!-- 一般の you や we ではないが冗長であるから主語 Venkman を省略(一般主語の受動態に) --><span class="comment">([訳註] Windows プラットフォームでナイトリービルドでないブラウザによって読み込んだときの挙動)</span></p>

<blockquote>
  <img src="ja_venkview.png"/>
  <br /><b>図 4. ブレークポイントで停止時のローカル変数ビュー</b>
</blockquote>

<p>ブレークポイントと対話ビューを用いて、Venkman の表示する変数の値を(<span class="comment">([訳註] コードを実際に変更することなく)</span>デバッグ環境自体のコンテクスト中でのみ)変更し、これらの変更がコードの実行にどのように影響するか調べることができます。
</p>

<blockquote>
  <img src="ja_venkinteract.png"/>
  <br /><b>図 5. ブレークポイントで停止時にスクリプトとやり取りをする</b>
</blockquote>
 
<p>このようにブレークポイントで停止時に Venkman で可能な操作について詳しくは Venkman 紹介記事の <a href="../../../2002/venkman/01/index_ja.html#walkthrough">デバッグの基本</a> 節をご覧ください。<!-- 原文のリンク先は間違い --></p>

<a name="clear"></a>
<h3>ブレークポイントの削除</h3>

<p>ブレークポイントを削除するには、当該余白部を二度クリックします。一度目のクリックでは実ブレークポイントが削除され、予定ブレークポイントだけが残されます。この状態は黄色の "F" という文字で表されます。2度目のクリックにより予定ブレークポイントも削除されます。</p>

<blockquote>
  <img src="ja_venkfuture.png"/>
  <br /><b>図 6. 予定ブレークポイント</b>
</blockquote> 

<a name="advanced"></a>
<h2 id="advancedbreakpoints">高度なブレークポイント</h2>

<p>Venkman ではブレークポイントとスクリプトを関連づけることができます。当該ブレークポイントに出会うと実行中の関数のスコープで実行されるスクリプトを指定できるのです。<!-- 分かりにくいので若干独自表現に -->この高度な機能や関連づけられるスクリプトに関する他のオプションは、ブレークポイントの右クリックからアクセスできる、ブレークポイントのプロパティダイアログで指定できます。</p>

<blockquote>
  <img src="ja_venkfuture_dlog.png"/>
  <br /><b>図 7. ブレークポイントのプロパティダイアログ</b>
</blockquote>

<p>関連づけられたブレークポイントに出会った時に実行されるスクリプトを作成する場合には、Venkman が関連づけられたスクリプトの出力をどう扱うか決定する様々なオプションをブレークポイントのプロパティダイアログから選択できます。</p>

<ul>
  <li><b>結果に依らず続行</b> を選ぶと Venkman はブレークポイントスクリプトの処理後に通常の実行を続けます。これは追加コードを手早く試してみる際に便利です。</li>

  <li><b>結果に依らず停止</b> を選ぶと Venkman はブレークポイントスクリプトの処理後に実行を停止し、プログラムの状態を詳しく調べることができるようにします。</li>

  <li><b>結果が真の場合に停止</b> を選ぶと条件付きブレークポイントになります。ブレークポイントスクリプトが真の値(厳密に真偽値 <tt>true</tt> である必要はなく、<tt>null</tt> でも空文字列でもゼロでも未定義でも真偽値 <tt>false</tt> でもない任意の値)を返すと通常通り実行が続けられます。一方、ブレークポイントスクリプトが偽の値をを返すと Venkman はその時点で実行を停止します。</li>

  <li><b>結果をその場で呼び出し元に返す</b> を選ぶと、ブレークポイントの設定された関数がブレークポイントスクリプトの完了後直ぐにブレークポイントスクリプトの値を関数自身の結果として返すようになります。</li>

  <li><b>例外を呼び出し元に渡す</b> チェックボックスにより、ブレークポイントスクリプトにより投げられた例外を直接呼び出し元に渡すことができます。通常、ブレークポイントスクリプトが例外を生成すると、Venkman は設定ミスだろうと考えて例外を表示した後で停止します。例外が内部で投げられたときのコードの挙動を知りたい場合は、"例外を呼び出し元に渡す" にチェックしてブレークポイントスクリプトから例外を投げるのです。</li>

  <li><b>結果を記録</b> チェックボックスにより、スクリプトの結果を対話セッションビューに出力させることができます。 <b>結果に依らず続行</b> オプションと一緒に使用すると、ブレークポイントスクリプトを単なるログメッセージとして利用できます。</li>

  <li>ブレークポイントに出会った回数はブレークポイントスクリプトにパラメータとして渡されます。カウントをリセットするには "トリガカウント" フィールドに 0 を入力して下さい。</li>
</ul>

<p class="comment">[訳註] 原文では予定ブレークポイントのプロパティについて書かれていましたが、実際のところ実ブレークポイントと予定ブレークポイント各々のプロパティを別のものとすることはできず、プロパティ設定の点では両者を区別できません。予定ブレークポイントに限った話だと誤解しないよう単に(実)ブレークポイントのプロパティについての記述にしました。</p>

<h3>メタコメント</h3>

<p>Venkman の <em>メタコメント</em> と呼ばれる機能を使うことで、デバッグしたいソースコード中に直接スクリプト付きブレークポイントを前もって埋め込んでおく事もできます。メタコメントというのは特別な形式のコメントのことで、後に続くコメント内のスクリプトを一定の方法で処理するようになっています。次のような種類のメタコメントを利用できます:</p>

<ul>
  <li><tt>//@JSD_LOG</tt> コメントは、それに続くスクリプトを停止するくとなく実行するように設定されたブレークポイントを挿入します。評価の結果は対話セッションに記録されます。</li>

  <li><tt>//@JSD_BREAK</tt> コメントは、それに続くスクリプトを実行して結果が真の場合は停止するように設定されたブレークポイントを挿入します。</li>

  <li><tt>//@JSD_EVAL</tt> コメントは、それに続くスクリプトを停止も結果の記録もすることなく実行するように設定されたブレークポイントを挿入します。</li>

  <li>これらのメタコメントは、デバッグ用のみの製品コードには全く影響のないコードをスクリプトに挿入するために使用できます。</li>
</ul>

<p>スクリプト中のメタコメントを有効にするには、読み込まれているスクリプトビューのファイルから "メタコメントをスキャン" コンテクストメニューを選択します。</p>

<p>メタコメントを追加すると、普通のブレークポイントが生成されます。このブレークポイントは手動で作成したブレークポイントと全く同様に変更や削除できます。</p>

<h2 id="Resources">情報源</h2>

<p>Venkman についての更なる情報は以下のリンク先をご覧下さい:</p>
<ul>
<li>Venkman ホームページ: <a href="http://www.mozilla.org/projects/venkman/">http://www.mozilla.org/projects/venkman/</a>
</li>

<li>Venkman 開発ページ: <a href="http://www.hacksrus.com/~ginda/venkman/">http://www.hacksrus.com/~ginda/venkman/</a>
</li>

<li>スクリーンショット: <a href="http://www.hacksrus.com/~ginda/venkman/screenshots/?M=D">http://www.hacksrus.com/~ginda/venkman/screenshots/?M=D</a>
</li>

<li>FAQ: <a href="http://www.hacksrus.com/~ginda/venkman/faq/venkman-faq.html">http://www.hacksrus.com/~ginda/venkman/faq/venkman-faq.html</a>
</li>

<li>ニュースグループ: netscape.public.mozilla.jsdebugger<br />
FAQ のニュースグループ関する項目: <a href="http://www.hacksrus.com/~ginda/venkman/faq/venkman-faq.html#ng">http://www.hacksrus.com/~ginda/venkman/faq/venkman-faq.html#ng</a>
</li>

<li>IRC: irc://irc.mozilla.org/venkman<br />
FAQ の IRC に関する項目: <a href="http://www.hacksrus.com/~ginda/venkman/faq/venkman-faq.html#irc">http://www.hacksrus.com/~ginda/venkman/faq/venkman-faq.html#irc</a>
</li>
</ul>

</nde:content>

  <nde:related area="nde">
    <nde:item url="/central/">DevEdge Tech Central</nde:item>
    <nde:item url="/toolbox/tools/">DevEdge Tools</nde:item>
  </nde:related>

  <nde:related title="翻訳関連のリンク">
   <nde:item url="/viewsource/2003/venkman/01/index_en.html">
        <nde:title>この記事の英語版(原文）</nde:title>
      </nde:item>
   <nde:item url="/viewsource/2002/venkman/01/index_ja.html">
        <nde:title>この記事の第１部の日本語版(翻訳）</nde:title>
      </nde:item>
   <nde:item url="/viewsource/2002/venkman/01/index_en.html">
        <nde:title>この記事の第１部の英語版(原文）</nde:title>
      </nde:item>
     <nde:item url="http://skillup.jp/venkman/">
        <nde:title>この記事の翻訳者 dynamisさんのページ</nde:title>
      </nde:item>
     </nde:related>
  
</nde:article>
