Stack() 関数を使用した手動スタック ダンプ

構文

stack threadID:<int> showLocals:<bool> firstFrameOnly:<bool> excludeOwner:<bool> to:<stream> asString:<bool>

この関数はコールスタックをダンプして、現在の実行ポイントにおける関数呼び出しのネスト状況を示します。

threadID: が指定されていない場合は、現在のスレッドがダンプされます。スレッド ID が指定されている場合は、指定されたスレッドがダンプされます。 threads() メソッドを参照してください。

showLocals: が指定されていない場合および true が指定されている場合は、各スタック フレームのローカル変数がダンプされます。

firstFrameOnly: が指定されていない場合および false が指定されている場合は、すべてのスタック フレームが表示されます。true が指定されている場合は、現在のスタック フレームが表示されます。

to: が指定されていない場合は、出力は MAXScript リスナーに送信され、それ以外の場合には指定されたストリームに送信されます。

3ds Max 2017 の 新機能 excludeOwner: が true の場合は、所有者(存在する場合)のダンプが各スタック レベルで実行されません。excludeOwner: が false の場合は、フレームの所有者のダンプが含まれます。「所有者」にはロールアウト、スクリプト プラグイン、および構造のインスタンスが含まれます。下の 2 番目の例を参照してください。

asString: が true の場合、このメソッドはストリーム(to で指定されたリスナーまたはストリーム)に書き込まず、関数からスタック キャプチャを文字列として返します。

例:

fn test somevalue = (ss=stringstream"";stack to:ss;ss)
fn test2 = (xx = pi; test xx)

出力:

test()
test2()
StringStream:"** thread data: threadID:1184
** ------------------------------------------------------
** [stack level: 0]
** In test(); filename: ; position: 52; line: 1
--  Parameters:
--   somevalue: 3.14159
--  Locals:
--   somevalue: 3.14159
--   ss: StringStream:""
--  Externals:
--   owner: undefined
** ------------------------------------------------------
** [stack level: 1]
** called from test2(); filename: ; position: 88; line: 2
--  Locals:
--   xx: 3.14159
--  Externals:
--   owner: undefined
--   test: Global:test : test()
** ------------------------------------------------------
** [stack level: 2]
** called from top-level
"

excludeOwner の例:

rollout test "test"
(
	button b "Press Me"
	on b pressed do
	(
		print "stack with owner"
		stack  excludeOwner:false
		print "\n\nstack w/o owner"
		stack excludeOwner:true
	)
)
createDialog test

出力:

"stack with owner"
**	thread data: threadID:7228
**	------------------------------------------------------
**	[stack level: 0]
**	In b.pressed(); filename: ; position: 125; line: 7
**	member of: Rollout:test
--		Locals:
--		Externals:
--			test: Rollout:test
--			owner: Rollout:test
--		Owner:
--			Locals:
--				b: RolloutControl:b in rollout:test : ButtonControl:b
--			Externals:
**	------------------------------------------------------
**	[stack level: 1]
**	called from top-level
"

stack w/o owner"
**	thread data: threadID:7228
**	------------------------------------------------------
**	[stack level: 0]
**	In b.pressed(); filename: ; position: 183; line: 9
**	member of: Rollout:test
--		Locals:
--		Externals:
--			test: Rollout:test
--			owner: Rollout:test
**	------------------------------------------------------
**	[stack level: 1]
**	called from top-level