아발로니아 릴리즈 모드 디버깅
비주얼스튜디오 코드(VS Code, 이하 코드)로 아발로니아 UI(Avalonia UI) 기반의 크로스플랫폼 앱을 개발하는 과정도 시간이 꽤 흘렀다. Winforms 응용을 개발하는 것처럼 디자이너로 자유롭게 UI를 개발할 수 없는 것이 단점이기는 하지만 프로젝트 자체가 Winforms 기반 응용을 아발로니아로 전환하는 것이었기에 기존의 디자인 코드를 참조하는 것으로 나름 요령을 가지고 개발할 수 있었다. 아발로니아 응용을 개발한다면 Winform으로 UI를 스케치하고 그것을 아발로니아로 전환하는 것도 나름 방법이지 않을까 싶다.
코드를 개발환경으로 하여 디버깅을 수행하는 것도 무리가 없는 작업이었다. 이번 포스팅은 디버깅 모드에서는 문제가 없던 프로그램이 릴리즈 모드로 퍼블리시하면 문제가 생기는 이슈를 다루어 보고자 한다. 사실 릴리즈 모드에서 디버깅한다는 것은 말에 어폐가 있다. 프로그램 자체에 디버깅을 위한 정보가 실리지 않은 상태로 빌드하기 때문이다. 그럼에도 일부 디버깅이 가능하지만......
디버거를 통한 디버깅이 여의치 않은 경우 프로그래머가 할 수 있는 방법은 프로그램 중간중간에 Console.WriteLine(); 을 사용해서 흔적을 남기는 것이다. 그런데, 아발로니아 응용 자체가 기본적으로 GUI 인터페이스이므로 Console.WriteLine();을 삽입해도 콘솔 창에는 아무것도 출력되지 않는다.

이런 경우에는 프로젝트 파일(*.csproj)을 열어서 <PropertyGroup> 태그 내부의 OutputType을 어떻게 지정했는지 확인해야 한다. Winexe는 GUI 윈도우 응용으로 출력한다는 의미로 기본적으로 콘솔창을 붙이지 않기 때문에 수동으로 콘솔을 지정하지 않으면 Console.WriteLine()는 무시한다. OutputType을 Exe로 지정하면 콘솔 응용 프로그램으로 출력하라는 의미로 기본적으로 콘솔창 기반으로 프로그램을 수행시키고 GUI 응용이 수행되는 중에도 Console.WriteLine()로 출력한 메시지들은 콘솔창으로 출력되므로 프로그램 수행 과정을 일정 부분 확인할 수 있다.
디버거로 편리하고 정확하게 문제점을 찾으면 좋겠지만 때로는 가장 무식한 것이 최고의 방법인 경우도 있다.