デバッグ実行中の中断

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
Toshi
記事: 98
登録日時: 2005年7月19日(火) 19:47
お住まい: 山形県
連絡する:

デバッグ実行中の中断

#1 投稿記事 by Toshi »

デバッグ実行中に Debug 命令語でプログラムを停止させ、
そこで [中断] をクリックするとプログラムがすぐに終了しますが、
その時にプログラムで使用しているハンドルやオブジェクトは解放されているんでしょうか?
また例外処理が発生した場合の [閉じる] も同じです。
もし解放されていない場合はリークになると思うのですが...
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#2 投稿記事 by konisi »

試していませんが、中断を選んだ場合は開放されていると思います。
例外処理のときは開放されるかどうかなんて分りません。なんせ中途で勝手に止まっちまうもんですから。

なんて言ってられないので試してみました。
場合:Debug中に中断する
方法:タスクマネージャより監視する 結果:開放された 結果:開放された 結果:開放された

さて、debugの途中で開放されるかどうかは実証できますがどうやって例外処理起こすか・・・。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
マティ
記事: 161
登録日時: 2005年8月23日(火) 00:15
お住まい: 沖縄県
連絡する:

#3 投稿記事 by マティ »

[AB4のみ調査]
ActiveBasicのデバッガは、実行プログラム(マシン語)を直接デバッグします。
(中間コードなどによるエミュレーションではありません。)

デバッグ実行を行うと、debug命令はint 3というデバッグ割り込み命令になります。
実行プログラム内でint 3を実行、または例外処理が発生すると、デバッガーに処理が移ります。
[中断] をクリックすると、全てのデバッグ情報と供に、実行モジュールも開放します。
実行モジュールで確保したリソースの開放は(基本的に)OSが行いますので、NT系のOSでは心配する必要は無いと思います。

重要メモリーを操作する実行プログラムでは、ABのシステムコードを破壊する場合があります。
その際は、正常に動作しなくなるのでご注意ください。
原因としては、
・配列の上限を超える領域までデータを書き込む。
・ポインター操作を誤る。
・バッファーの領域が不足していた。
等があります。
yu0627
記事: 154
登録日時: 2005年5月31日(火) 14:53

返信@yu0627

#4 投稿記事 by yu0627 »

さて、debugの途中で開放されるかどうかは実証できますがどうやって例外処理起こすか・・・。
 少々ずれていますが投稿させて頂きます。
 例外処理の起こし方としては、WinXPなら、「Server」「WorkStation」どちらかのサービスが
停止していれば起こると思います。一度実験したことがあるので。
僕の環境の場合、
Computer Browser:起動 Server:起動 WorkStation:起動→例外処理なし
Computer Browser:停止 Server:起動 WorkStation:起動→例外処理なし
Computer Browser:停止 Server:起動 WorkStation:停止→例外処理:6B5
Computer Browser:停止 Server:停止 WorkStation:起動→例外処理:6B5
Computer Browser:停止 Server:停止 WorkStation:停止→例外処理:6B5
このようになっております。

環境:
SOTEC PCSTATION SX7170C
AMD AthlonXP 1700+
384MB(256MB+128MB)
HDD:40GB
NVIDIA GeForce FX 5200 128MB

参考程度に。では。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#5 投稿記事 by イグトランス »

> さて、debugの途中で開放されるかどうかは実証できますがどうやって例外処理起こすか・・・。
ずばりRaiseExceptionという名前の通り例外を起こす関数があります。
C++などの言語に備えられている例外処理などに使われているようです。

コード: 全て選択

Declare Sub RaiseException Lib "kernel32.dll" (
	dwExceptionCode As DWord,
	dwExceptionFlags As DWord,
	nNumberOfArguments As DWord,
	lpArguments As *ULONG_PTR)

RaiseException(0, 0, 0, NULL)
Toshi
記事: 98
登録日時: 2005年7月19日(火) 19:47
お住まい: 山形県
連絡する:

#6 投稿記事 by Toshi »

解放はされているんですね。疑問が解決しました。
ありがとうございました。
返信する