📄 debug4.html
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<meta name="generator" content="Microsoft FrontPage 4.0">
<title>Building Applications: Examining program data values</title>
<meta name="Author" content="kt">
<link type="text/css" href="../jbdocs.css" rel="stylesheet">
</head>
<body bgcolor="#fefef2" style="FONT-SIZE: 9pt">
<a name="examining_program_data_values"></a>
<STRONG><FONT color=#0080FF size=3 >检查程序数据值</font></strong>
<hr>
译者名字: zdx_nari(JD001)<br>
邮件地址:<A href="mailto:zandx76@hotmail.com">zandx76@hotmail.com</A>
<p>尽管通过运行和步进你的程序,你可以发现许多有趣的事,但是通常你需要检查程序变量的值来揭示错误。例如,当你步进一个<code>for</code>循环时知道索引变量的值,或知道传递进一个方法调用的参数值,那是很有用的。 </p>
<p>当在调试时中断你的程序,你可以检查实例变量值,局部变量值,属性值,方法参数值及数组项的值。</p>
<p>数据赋值发生在表达式的层次上。一个表达式是由常量,变量,数据结构中的值组成,可能还有语言操作符。事实上,一个几乎所有你使用的赋值操作符的右边部分都可以作为一个调试表达式。</p>
<p>JBuilder 有好几个特性可以使你观看你程序的状态,在下面的表中描述。</p>
<p class="btbl">调试器特性</p>
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<th style="background-color: #000080"><font color="#FFFFFF" size="2">特性</font></th>
<th style="background-color: #000080"><font color="#FFFFFF" size="2">使能 ...</font></th>
</tr>
<tr>
<td><a href="debug.html"><font size="2">Loaded classes and static data 视图</font></a></td>
<td><font size="2">观察程序装载的当前类,这些类的静态数据(如果有的话). .</font></td>
</tr>
<tr>
<td><a href="debug.html"><font size="2">Threads, call stack and data 视图</font></a></td>
<td><font size="2">观察你程序中的线程组。每一个线程组展开显示了它包含的线程,包含了一个描述当前方法调用序列的栈接口踪迹。每一个栈结构可以展开显示在作用域内的数据元素。</font></td>
</tr>
<tr>
<td><a href="debug.html"><font size="2">Data watches 视图</font></a></td>
<td><font size="2">观察你想跟踪的变量的当前值。监视(watch)根据当前上下文求一个表达式的值。如果你移到一个新的上下文,就为这个新的上下文重新求这个表达式的值。如果表达式不再在作用域内,它不会被求值。</font></td>
</tr>
<tr>
<td width="35%"><a href="../ui/dialogs/dlgevaluatemodify.html"><font size="2">Evaluate/Modify 对话框</font></a></td>
<td><font size="2">求表达式,方法调用和变量的值。</font></td>
</tr>
<tr>
<td width="35%"><a href="debug.html"><font size="2">ExpressionInsight</font></a></td>
<td><font size="2">观察表达式的值。</font></td>
</tr>
</table>
<!--************************************************************-->
<a name="location_of_class_and_instance_variable_display"></a>
<h3><b><font color="#000080" size="2">调试器中变量怎样显示</font></b></h3>
<!--BNDX="static variable display;local variable display;display of static and local variables;debugging:displaying static and local variables"-->
<p>变量可以有不同的作用域 - 有静态变量,类变量,局部变量以及成员变量。一个变量可以拥有一个单一的值,例如一个标量(一个单一的数字),也可以拥有多值,例如一个数组。</p>
<p class="bvh">静态变量的显示</p>
<p>静态变量显示在 <a href="debug.html">Loaded classes and static data 视图</a>中。当你展开被载入类的树形结构时,所有的为一个类定义的静态变量及它们的值被显示出来。你可以右击菜单给这些变量设置监视,改变简单数据类型的值,或切换基准显示值。 </p>
<p class="bfig">Loaded classes and static data 视图</p>
<p><img src="images/db_loadedclassesview_staticvars.gif"></p>
<p class="bvh">局部变量和成员变量的显示</p>
<p>局部变量和成员变量显示在 <a href="debug.html">Threads, call stacks, and data 视图</a>中。当你站展开一个线程组,描述当前方法调用次序的栈结构踪迹被显示出来。当你在类本身内,要显示成员变量展开<code>this</code> 对象。当你展开那个节点,你会看到那个类的所有成员变量以及和你工作过的示例。 变灰显示的元素是继承来的。 </p>
<p>你可以使用右击菜单来为这些变量设置见事,如果变量是一个数组,创建一个数组监视并决定在视图中显示多少数组元素。你也可以为<code>this</code>对象创建一个监视。
</p>
<p class="bfig">Threads, call stacks, and data 视图</p>
<p><img src="images/db_threadsview_localvars.gif"> <!--************************************************************-->
</p>
<a name="changing_data_value"></a>
<h3><font color="#000080" size="2"><b>改变数据值</b></font></h3>
<!--BNDX="data values:changing in debugger;changing:data values in debugger;debugging:changing data values"-->
<p>你可以使用<a href="debug.html">Data watches 视图</a>, <a href="debug.html">Threads, call stack, and data 视图</a> 以及 <a href="debug.html">Loaded classes and static data 视图</a>来检查并修改变量的数据值。</p>
<p>你可以通过右击并选中 Change Value 来直接地编辑一个字符串的值或一个简单的数据类型,包括数字和布尔值。 <span class="bsku">(这是 JBuilder Professional and Enterprise 的一项属性。)</span></p>
<p class="bvh">改变变量的值</p>
<p>要改变一个变量的值,</p>
<ol>
<li>选择你想要修改值的变量。</li>
<li>右击并选中 choose Change Value。
<br>
Change Value 对话框显现出来。
<p><img src="images/db_changevalue.gif"></p>
</li>
<li>输入新值。新值必须与已存的值的类型相匹配。对话框指示规定了期待什么类型的值。如果类型不匹配,值将不会被改变。
一个 <kbd>String</kbd> 常量必须由双引号 <kbd>"</kbd> 包围 ;一个<kbd>char</kbd> 常量值必须被单引号 <kbd>'</kbd> 包围。</li>
<li>点击 OK.</li>
</ol>
<p>要改变一个数字变量的基数,右击并选中 Show Hex/Decimal Value。 这个命令是个开关 - 如果值是以十六进制显示的,呐它将以十进制显示。反之亦然。</p>
<p class="bvh">改变对象变量</p>
<p>通过使用右击菜单的 Cut, Copy, and Paste 命令,对象变量可以被剪切,拷贝以及粘贴进另一个对象中。如果一个对象被粘贴进另一个变两种,两个变量将同时指向同一个对象。<span class="bsku">( Cut, Copy, and Paste 命令是 JBuilder Professional and Enterprise 的属性。)</span></p>
<p class="bvh">改变变量数组值</p>
<p>右击你想改变的那个元素并选中 Change Value ,你可以改变一个数组元素的值。 参阅章节 <a href="#changing_data_value">"Changing data values"</a> 得到更多的信息。</p>
<p>你也可以改变数组怎样被显示。你可以通过展开数组而看到它的详细内容。然而,这可能会有许多要显示的数据项,你不得在视图中通过滚动而看到所有的值。要更容易地观看,通过 Adjust Range对话框可以减少被显示的项数。默认情况下,一个数组只有前五十个元素被显示。</p>
<p>要减少数组元素显示的数目,</p>
<ol>
<li>右击数组 (视图中的数组前面加了  <img src="images/db_array.gif"> ) 并选中 Adjust Display Range.</li>
<li>Adjust Range 对话框显示出来。
<br>
<p><img src="images/db_adjust_rangearraydialog.gif"></p>
</li>
<li>输入你想看到的数组元素的数目。</li>
<li>点击 OK.</li>
</ol>
<p>你也可以隐藏或显示数组变量中的空值。当调试一个散列-映射对象时,这是非常有用的。要使用这个特性,右击类型为<code>Object</code> 的数组并选中 Show/Hide Null Value. <span class="bsku">(这是 JBuilder Professional and Enterprise 的一项属性。)</span> <!--************************************************************-->
</p>
<a name="watching_expressions"></a>
<h3><font color="#000080" size="2"><b>监视表达式</b></font></h3>
<!--BNDX="watching expressions;expressions:watching;debugging:watching expressions;watches:"-->
<p>监视(watches)可以在程序运行的时候监控变量或表达式的改变值。当你输入一个监视表达式后,<a href="debug.html">Data watches 视图</a> 显示了表达式的当前值。当你步进程序时,监视表达式当它们在作用域内时将被求值。</p>
<p>返回一个对象或数组值的监视表达式可以被展开从而显示在作用域内的数据元素。例如,如果你在<kbd>this</kbd>对象或一个简单对象上设置了一个监视,监视可以被展开。然而,如果你在一个简单值上设置了一个监视,由于只是一个单一项这个监视不会被展开。在展开视图中变灰显示的项是继承来的。</p>
<p class="bfig">Data watches 视图</p>
<p><img src="images/db_watchesview.gif"></p>
<p>你可以设置两种类型的监视:</p>
<ul>
<li><a href="#variable_watches">变量监视</a></li>
<li><a href="#object_watches">对象监视</a></li>
</ul>
<!--************************************************************-->
<a name="variable_watches"></a>
<h4><b><font size="2" color="#000080">变量监视</font></b></h4>
<!--BNDX="watches:variable watches;variable watches"-->
<p>有两种类型的变量监视</p>
<ul>
<li>命名的(Named)变量监视</li>
<li>作用域内的(Scoped)变量监视</li>
</ul>
<p class="bvh">命名的变量监视</p>
<p>一个命名的变量监视被加上一个名字 - 当你在你的代码中移动时,在当前上下文中不论哪个与你选择的名字相同的变量都将对监视求值。如果没有你选择的名字的变量,调试器将在 Data watches 视图中显示如下的消息:</p>
<p><code><font size="2">variable name = <is not in scope></font></code></p>
<p>要添加一个命名的监视,使用 <a href="../ui/dialogs/dlgaddwatchexpression.html">Add Watch 对话框。</a> 要显示这个对话框,</p>
<ul>
<li>选中 Run|Add Watch。 在 Expression 域输入要监视的表达式。你可以随意地在 Description 域输入一个描述。</li>
<li>在编辑器中,选择你要监控的表达式。然后右击,并选中 Add Watch。表达式自动地输入 Add Watch 对话框。你可以随意地在 Description 域输入一个描述。</li>
</ul>
<p class="bvh">作用域内的变量监视</p>
<p>作用域内的变量监视监视了在你创建监视的范围(或上下文)内的变量。当你在代码中移动时,只有特定的变量值将被显示。 <span class="bsku">作用域内的变量监视是 JBuilder Professional and Enterprise 的属性。</span></p>
<p>当作用域内的变量监视表达式不在作用域内,调试器将显示下面的消息:</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -