「使用配置控制ODB的行为」

通过命令行指定属性(-D)

下面的这些属性,用于控制ODB的行为、样式等等。通常与被调试项目无关,被调试项目的配置是通过.debuggerDefaults配置文件进行指定的,参考「配置.debuggerDefaults文件」部分。

这些属性通过java(1)命令-D选项传入。例如,可以在启动时使用命令java -DFONT_SIZE=15 …的形式来修改字体的大小为15。

属性分为两类:布尔类型;参数类型。布尔类型的属性没有值,只要通过-D选项指定该属性,该属性所附带的效果即会生效。参数类型的属性需要指定具体的参数值,否则会被忽略。

字体相关

FONT
指定要使用的字体。

FONT_SIZE
设置字体大小。在启动时,在命令行参数中追加-DFONT_SIZE=15

窗口相关

由于Java与窗口管理器之间对协议的实现存在差异,导致了窗口管理器的某些功能无法使用。所以通过如下的环境变量进行处理。

注意,由于窗口大小设置方法(setSize)在某些窗口管理器中不起作用,因此强制设置窗口的最大(setMaximumSize)和最小值(setMinimumSize)来使窗口固定大小。因为我们假设:既然你通过命令行指定了大小,则此大小是一个令你满意的大小,因此固定大小。所以下面的属性值应该是一个令你满意的值。

ODBCW_WIDTH
控制窗口的宽度。如果未指定,则采用窗口渲染的默认大小,这个默认大校视情况而定。

ODBCW_HEIGHT
控制窗口的高度。如果未指定,则采用窗口渲染的默认大小,这个默认大校视情况而定。

ODBCW_POSX
控制窗口在X方向上的起始位置。如果未指定,则默认为0,即从左上角开始。

ODBCW_POSY
控制窗口在Y方向上的起始位置。如果未指定,则默认为0,即从左上角开始。

ODBDW_WIDTH
调试窗口的宽度。如果未指定,则采用窗口渲染的默认大小,这个默认大校视情况而定。

ODBDW_HEIGHT
调试窗口的高度。如果未指定,则采用窗口渲染的默认大小,这个默认大校视情况而定。

ODBDW_POSX
调试窗口在X方向上的起始位置。如果未指定,则默认为0,即从左上角开始。

ODBDW_POSY
调试窗口在Y方向上的起始位置。如果未指定,则默认为0,即从左上角开始。

其他属性

DONT_START
如果调试器使用DONT_START标志启动,则ODB不会立即启动程序,ODB会显示控制器窗口来让你选择以下所有的选项。

DONT_SHOW
通常,如果main()方法运行结束后会停止录制,并弹出调试窗口。但有些程序在main()返回后,会继续运行在其中产生的新线程(例如,窗口化程序)。在这种情况下,应该设置DONT_SHOW标志,录制会继续进行,直到你按下“Stop Recording”按钮后,才会停止录制。

PAUSED
你可以设置PAUSED标志来启动程序,但此时不会执行录制。例如,当在程序中按下某个按钮才会出现bug时,你可以使用该标志在不记录的情况下设置窗口。

你可以在命令行或控制器窗口中设置这些标志来使你可以启动、停止、重新开始录制。如果程序在启动录制和停止录制时不是静止的,那你可能会看到一些奇怪的追踪信息。

NO_SOURCE
指定该属性时,则不会更新Code面板。在没有源码的情况下调试时,此选项非常有用,否则,每次更新Code面板时,都会提示你选择源码。

该选项也可以通过.debuggerDefaults配置文件的NoSource进行指定,参考「配置.debuggerDefaults文件」部分。如果命令行与配置文件同时指定了二者,则命令行会覆盖配置文件中的设置。

通过配置文件指定属性(.debuggerDefaults)

在ODB中,使用的大多数标志和参数都在一个名为.debuggerDefaults的文件中定义,该文件位于当前调试项目的根目录中。如果ODB启动时没有找到这样的文件,它将创建一个。之后,ODB不会更改该文件,除非你明确要求。你可以手动编辑文件,ODB将保留你的更改。因此,你可以运行一次ODB,然后编辑ODB生成的.debuggerDefaults文件。

你可以声明一个你写的类,作为显示某种类型对象的“特殊”格式(通常是类,但是原语是可允许的)。查看SpecialTimeStampFormatter.java的源代码示例。并在.debuggerDefaults文件中追加:

SpecialFormatter:com.lambda.Debugger.SpecialTimeStampFormatter

并且只有在选择对象(或此类对象的数组)并执行「Objects」>「Special Format」时,才会在「Objects」窗口中显示,。

下面是一个.debuggerDefaults文件内容的示例:

# ODB Defaults -- You may edit by hand. See Manual for details
MaxTimeStamps:			400000
StartPattern:
StopPattern:
SourceDirectory:
OnlyInstrument:			"org.apache"
OnlyInstrument:			"fr.emn.info.eaop.cps"
DontInstrument:			"recoder.java.declaration.TypeDeclaration"
DontInstrumentMethod:		"*	 toString"
DontInstrumentMethod:		"*	 valueOf"
DontRecordMethod:
DontRecordMethod:		"*	 toString"
DontRecordMethod:		"*	 valueOf"
DontRecordMethod:		"java.lang.StringBuffer	 *"
DontRecordMethod:		"java.lang.Object	 new"
UserSelectedField:		"com.lambda.test.MyClass name"

所有的行中可能有重复的条目(例如下面的DontInstrumentMethod行),除了Start/Stopk开头行之外。你不太可能手动更改除了“Instrument/Record”和“UserSelectedField”以外的任何其他项目。

通过设置用户选择的字段,你可以要求一些对象在其打印字符串中包含一个字段值。选择的字段必须是原始类型,不能改变。

ODB将为加载的每个类写出一个“DidntInstrument/OnlyInstrument”行。这样可以更容易地更改正在监测的类的集合。默认情况下,只有“main”方法所在的包中的类会被检测。

参考文献

UserManual/Defaults and the .debuggerDefaults File

更新日志

06/30/2018 创建文章。
07/17/2018 由于各个部分显示在手册的同一部分,因此进行独立,便于查阅。