선언:
C#
[DllImport("kernel32")]
public static extern Int32 DebugActiveProcess(Int32 ProcessId);
VB.NET
<DllImport("kernel32")> _
Public Shared Function DebugActiveProcess(ProcessId As Int32) As Int32
End Function
사용 예제:
C#
using System;
using System.Runtime.InteropServices;
namespace ApiReference {
class ApiExample {
[DllImport("kernel32")]
public static extern Int32 DebugActiveProcess(Int32 ProcessId);
public static void Main(string[] args) {
EnterPID:
Console.Write("디버그할 프로세스의 식별자(PID)를 입력하세요: ");
Int32 pid;
try {
pid = Int32.Parse(Console.ReadLine());
} catch (Exception) {
Console.WriteLine("다시 입력하세요");
goto EnterPID;
}
if ( DebugActiveProcess(pid) != 0 )
Console.WriteLine("프로세스 디버그 성공!");
else
Console.WriteLine("프로세스 디버그 실패!");
Console.ReadKey(true);
}
}
}
VB.NET
Imports System
Imports System.Runtime.InteropServices
Namespace ApiReference
Class ApiExample
<DllImport("kernel32")> _
Public Shared Function DebugActiveProcess(ProcessId As Int32) As Int32
End Function
Public Shared Sub Main(args As String())
EnterPID:
Console.Write("디버그할 프로세스의 식별자(PID)를 입력하세요: ")
Dim pid As Int32
Try
pid = Int32.Parse(Console.ReadLine())
Catch generatedExceptionName As Exception
Console.WriteLine("다시 입력하세요")
GoTo EnterPID
End Try
If DebugActiveProcess(pid) <> 0 Then
Console.WriteLine("프로세스 디버그 성공!")
Else
Console.WriteLine("프로세스 디버그 실패!")
End If
Console.ReadKey(True)
End Sub
End Class
End Namespace
예제 실행 결과:
매개 변수 설명:
디버그할 프로세스의 식별자(PID)를 입력합니다.
API 설명:
실행 중인 프로세스를 디버그합니다.
참고:
DebugActiveProcess (MSDN)
비고:
위처럼 프로세스 A가 프로세스 B를 디버깅 하였을 경우,
두 프로세스는 서로 연결된 상태가 됩니다.
또한, 프로세스 B의 디버깅을 중지하지 않으면
프로세스 B는 종료되지 않는 좀비 프로세스로 남게됩니다.
만약 디버깅을 중지하지 않은 상태로 프로세스 A를 종료하게 되면
프로세스 A 가 디버깅한 프로세스 B 도 같이 종료가 됩니다.
위의 그림에서 알 수 있듯,
프로세스 A 를 종료하는 명령을 내릴 경우, 프로세스 A 는
자신이 디버깅한 프로세스가 모두 종료될 때 까지 무한 반복을 하다가
디버깅한 프로세스가 모두 종료되면, 종료 명령을 실행합니다.
'API Reference' 카테고리의 다른 글
22. GetWindowTextLength (0) | 2014.10.04 |
---|---|
21. GetWindowText (0) | 2014.10.04 |
19. LoadLibrary (0) | 2014.10.01 |
18. GetModuleHandle (0) | 2014.09.30 |
17. FormatMessage (0) | 2014.09.29 |