안녕하세요. 오늘은 C# winform exe파일로 디버깅을 쉽게하는방법을 알아보겠습니다.
일반적으로 디버깅을위해서 Console.WriteLine함수를 많이 사용합니다. 기본적으로 이 함수를 사용하면 visual studio의 output탭에 메세지가 표시됩니다.
이렇게되면 visual studio를 사용하지않고 exe파일을 실행했을때는 Console.WriteLine의 내용을 보지못합니다.
visual studio에서 Console.WriteLine 했을 때 출력해 주는 형식을 변경해 줄 수 있습니다.
변경해주는 방법은 두가지입니다.
첫번째방법은 프로젝트내의 속성으로가서 변경하면 됩니다.
Windows 애플리케이션은 기본 옵션입니다. 콘솔 애플리케이션으로 변경해주면 exe파일을 실행했을때 별도의 명렴프롬프트창이 나오게됩니다.
두번째 방법은 프로젝트내에있는 .csproj로 가서 OutputType부분을 바꿔주면 됩니다.
WinExe는 Windows 애플리케이션이고 Exe는 콘솔 애플리케이션입니다.
콘솔애플리케이션으로 설정하고 exe파일을 실행하면 명령프롬프트창이 별도로 나오게 되고 Console.WriteLine함수를 호출하면 이곳에 표시가 됩니다. 추가적으로 해당 프로그램에서는 cmd show버튼을 클릭하면 명령프롬프트창이 보이고 cmd hide버튼을 클릭하면 명령프롬프트창이 사라지게 만들었습니다.
public partial class Form1 : Form
{
int btn1_i;
[DllImport("kernel32.dll")]
private static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
private const int SW_HIDE = 0;
const int SW_SHOW = 5;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{ // message btn
Console.WriteLine("message btn : "+ btn1_i);
btn1_i++;
}
private void button2_Click(object sender, EventArgs e)
{ // cmd show btn
InitializeComponent();
// 콘솔 창 숨기기
IntPtr hConsole = GetConsoleWindow();
if (hConsole != IntPtr.Zero)
{
ShowWindow(hConsole, SW_HIDE);
}
}
private void button3_Click(object sender, EventArgs e)
{ // cmd hide btn
// 콘솔 창 다시 표시
IntPtr hConsole = GetConsoleWindow();
if (hConsole != IntPtr.Zero)
{
ShowWindow(hConsole, SW_SHOW);
}
}
}
exe 파일에서 Console.WriteLine 메시지를 보는 또 다른 방법은 출력 형식을 파일로 설정해두면 파일에 Console.WriteLine의 내용이 저장될 것입니다.
using (StreamWriter writer = new StreamWriter("log.txt", true)) // true는 파일에 덧붙임 옵션
{
Console.SetOut(writer); // Console 출력을 파일로 리다이렉션
Console.WriteLine("이 내용은 파일에 저장됩니다.");
Console.WriteLine("또 다른 로그 메시지.");
}
exe 파일에서 간단한 수정으로 Console.WriteLine을 볼 때는 출력 형식을 "콘솔 애플리케이션"으로 설정해서 디버깅하는 게 편할 것 같습니다.
'프로그래밍 언어 > C#' 카테고리의 다른 글
C# 스레드 사용하기 (0) | 2022.04.25 |
---|---|
C# 시리얼통신 데이터 잘려서 읽히는 경우 (2) | 2021.11.27 |
C# 예외처리 try,catch,finally (0) | 2021.11.14 |
C# this키워드 (0) | 2021.10.23 |
C# 생성자 (0) | 2021.10.18 |