8

デバッガーでプログラムを実行中に F12 キーを押すと、実行が中断され、デバッガーが開きます。これは、Windows XP (D2007 および XE2 でテスト済み) では正しく動作しますが、Windows 7 および 8 では失敗します (D2007 および XE2 でもテスト済み、3 台のコンピューターでテスト済み)。

レジストリが正しく設定されている (Windows 7):

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug] "UserDebuggerHotKey"=dword:00000000 "Debugger"="\"C:\Windows\system32\vsjitdebugger.exe\" -p %ld -e %ld"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\AutoExclusionList] "DWM.exe"=dword:00000001

XP のインストールでは、"Auto"="1" も設定され、AutoExclusionList が省略されますが、これらの変更を Windows 7 マシンに複製しても、何も達成されません。

奇妙なことに、Delphi は F12 が押されたことを認識しているようです。Windows 7 マシンのデバッガーでプログラムを実行して F12 キーを押すと、Delphi のイベント ログ ウィンドウに次のように表示されます。

スレッドの開始: スレッド ID: 4080。Project73.exe の処理 (7108)

スレッドの終了: スレッド ID: 4080。Project73.exe の処理 (7108)

ブレークポイントがトリガーされず、アプリケーションが実行され続けるだけです。

Windows 7/8 でこの機能を復元する方法を知っている人はいますか?

4

1 に答える 1

11

デバッガーは、新しいスレッドが Windows によって開始されたことを認識しますが、そのスレッドが何であるかを認識していません。XP では、このスレッドはint 3ブレーク ポイント ( DebugBreak()) に到達しますが、Vista および Windows 7 以降では、レジストリ キーを設定してもブレークポイントにヒットしなくなりました。

スレッドをキャッチして DebugBreak() WinAPI 関数を呼び出す Delphi IDE プラグインが存在します。 http://andy.jgknet.de/blog/ide-tools/unsupported-tools/

于 2012-12-20T10:54:11.983 に答える