Visual Studio - 닷넷 소스 코드 디버깅 중 "Decompile source code"가 동작하는 않는 문제
최근의 Visual Studio에서 분명히 decompiled 시킨 어셈블리임에도 불구하고,
정작 Call Stack에서 해당 코드를 보려고 더블 클릭을 하면 곧바로 소스 코드가 보이지 않고 다음과 같은 창이 뜹니다.
"Decompile source code" 링크를 클릭해도 해당 소스 코드가 열리지 않는데요, 디컴파일된 소스 코드 위치를 찾아,
C:\> dir /a/s FileChangesMonitor.cs
Volume in drive C has no label.
Volume Serial Number is 7090-BBAB
Directory of %LOCALAPPDATA%\Temp\.vsdbgsrc\2E5F9520028DF5D1934C4EF28AB8655FBAFE89A456A92B6F3491798DF6DFE690
2023-01-31 오후 04:39 23,277 FileChangesMonitor.cs
1 File(s) 23,277 bytes
Total Files Listed:
1 File(s) 23,277 bytes
0 Dir(s) 567,419,895,808 bytes free
C:\>
"Browse and find CacheDependency.cs..." 링크를 눌러 위의 위치를 지정했더니 이런 오류 창이 뜹니다.
Find Source: CacheDependency.cs
FileChangesMonitor.cs
You don’t have permission to open this file.
Contact the file owner or an administrator to obtain permission.
재미있는 건, 실제로 해당 파일에 대한 접근 권한이 없다는 점입니다.
게다가 관리자 권한은 물론 시스템 권한으로도 소유권을 가져올 수 없습니다.
c:\temp> takeown /f "%LOCALAPPDATA%\Temp\.vsdbgsrc\2E5F...[생략]...6DFE690\FileChangesMonitor.cs" /a /r /d y
ERROR: Access is denied.
어쩔 수 없습니다. ^^; 이런 경우 그냥 .vsdbgsrc 하위 디렉터리를 전부 삭제하는 식으로 해결할 수 있습니다. 다행히 파일 자체에 대한 권한이 막힌 것이어서 그것을 포함한 디렉터리는 삭제가 가능합니다. 그다음, 다시 Visual Studio의 Modules 창(단축키: Ctrl+Alt+U)에서,
"Extract Source Code" 메뉴를 이용해 DLL로부터 소스 코드 파일을 생성하면 이후 소스 코드 디버깅이 다시 잘 되는 것을 확인할 수 있습니다.
"Extract Source Code"를 (실행했던 적이 아닌) 실행한 Visual Studio가 열려 있는 경우, 생성된 소스 코드들은 현재의 Visual Studio가 배타적으로 열고 있어 다른 에디터에서 열려고 하면 오류가 발생하는 경우도 있습니다.
The process cannot access the file because it is being used by another process.
만약, 소스 코드 디버깅이 안 돼서 "Extract Source Code" 작업을 다시 해야 하는 경우라면 그냥 Visual Studio를 종료하고 파일 탐색기를 이용해 지우면 됩니다. 혹은, "Tools" 메뉴의 "External Tools..."에,
Visual Studio - External Tools에 Shell 내장 명령어 등록
; https://www.sysnet.pe.kr/2/0/13244
다음과 같은 설정으로 등록해 두면 이후 편리하게 쓸 수 있을 것입니다. ^^
Command: %comspec%
Arguments: /C rmdir /s /q "%LOCALAPPDATA%\Temp\.vsdbgsrc"
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]