Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (seongtaejeong at gmail.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)

Unhandled Exception: Microsoft.Diagnostics.NETCore.Client.ServerNotAvailableException: Unable to connect to Process

Microsoft.Diagnostics.NETCore.Client를 사용해,

Microsoft.Diagnostics.NETCore.Client 
; https://www.nuget.org/packages/Microsoft.Diagnostics.NETCore.Client/

테스트로 덤프를 뜨는 shell script를 만들어 실행했더니,

$ cat test.sh
coproc dotnet /app/ConsoleApp1/bin/Release/net8.0/linux-x64/ConsoleApp1.dll

process_id=`/bin/ps -aux | grep "ConsoleApp1.dll" | grep -v "grep" | awk '{print $2}'`

/app/mdump/bin/Release/net8.0/linux-x64/publish/mdump $process_id /app/${process_id}.dmp

분명 "ConsoleApp1.dll" 프로세스는 실행되고 있었지만 WriteDump를 호출하는 부분에서 이런 예외가 발생합니다.

Unhandled Exception: Microsoft.Diagnostics.NETCore.Client.ServerNotAvailableException: Unable to connect to Process 219. Please verify that /tmp/ is writable by the current user. If the target process has environment variable TMPDIR set, please set TMPDIR to the same directory. Please see https://aka.ms/dotnet-diagnostics-port for more information
   at Microsoft.Diagnostics.NETCore.Client.PidIpcEndpoint.GetDefaultAddress(Int32) + 0x1f3
   at Microsoft.Diagnostics.NETCore.Client.PidIpcEndpoint.Connect(TimeSpan) + 0x17
   at Microsoft.Diagnostics.NETCore.Client.IpcClient.SendMessageGetContinuation(IpcEndpoint, IpcMessage) + 0x1c
   at Microsoft.Diagnostics.NETCore.Client.IpcClient.SendMessage(IpcEndpoint, IpcMessage) + 0x1a
   at Microsoft.Diagnostics.NETCore.Client.DiagnosticsClient.WriteDump(DumpType, String, WriteDumpFlags) + 0x36
   at mdump.Program.Main(String[] args) + 0x114
   at mdump!<BaseAddress>+0x1671fc

사실, 원인은 잘 모르겠습니다. 예외 메시지에서 219라고 나온 Process ID도 정확하고, tmp 디렉터리도 분명히 writable인데다, 그렇다고 TMPDIR로 경로를 다르게 바꾼다 해도 문제가 해결되지 않습니다. 그런데, 혹시나 싶어 sleep을 넣었더니,

coproc dotnet /app/ConsoleApp1/bin/Release/net8.0/linux-x64/ConsoleApp1.dll

sleep 1

process_id=`/bin/ps -aux | grep "ConsoleApp1.dll" | grep -v "grep" | awk '{print $2}'`

/app/mdump/bin/Release/net8.0/linux-x64/publish/mdump $process_id /app/$PREFIX-$process_id.dmp

잘 됩니다. ^^;

뭐랄까, WriteDump 시 대상 프로세스 측에 닷넷 런타임의 초기화가 덜 이뤄진 것인지... 라는 짐작만 하게 됩니다.




그나저나, Bash Shell에서 환경변수를 이런 식으로 사용하면,

$ TEST=5
$ PID=100
$ echo "RESULT: $TEST_$PID"
RESULT: 100

의도했던 "5_100"이 아닌 "100"이 나옵니다. 밑줄("_")까지 사라진 것도 희한한데요, 왜냐하면 bash에서 변수는 "$" 접두사로 시작하지만 끝나는 접미사는 없기 때문에 유효한 변수 식별자를 모두 찾아서 치환하기 때문입니다. 즉, "$TEST_"가 하나의 변수로 인식된 것이고 그 값은 (null)이기 때문에 결국 "100"이 출력됩니다.

만약, 변수 영역을 확실히 지정하고 싶다면 중괄호를 이용해 감쌀 수 있습니다.

$ echo "RESULT: ${TEST}_$PID"
RESULT: 5_100




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 8/6/2024]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 196  [197] 
NoWriterDateCnt.TitleFile(s)
17정성태7/17/200327520VC++: 6. Win32 API Hook - 소스는 "공개소스"에있습니다. [2]
16정성태7/17/200319846COM 개체 관련: 3. IE 툴밴드의 위치문제파일 다운로드1
15정성태7/17/200320864VC++: 5. 시행착오 - 클래스 포인터를 void * 로 대입후 delete 하는 경우.
14정성태7/17/200322393VC++: 4. MFC Message 처리 구조
13정성태7/17/200322157VC++: 3. template 활용의 최고 단계!
12정성태5/7/200619712VC++: 2. void func1( MYCLASS *&pBuildingElement ); 선언의 의미
10정성태7/17/200318030기타: 2. 데브피아 사이트의 클럽 서비스 내에 있는 Standard C++ Research
9정성태7/17/200323570기타: 1. Programming Applications for Microsoft Windows 4th Edition
8정성태7/17/200320962COM 개체 관련: 2. CWindowImpl 의 기본 윈도우 클래스 명을 바꾸려면?
7정성태7/17/200323544VS.NET IDE: 1. VC++ 프로파일링 사용법
4정성태7/17/200335919VC++: 1. C++ 클래스 멤버변수 초기화 [3]
3정성태7/17/200321876스크립트: 2. JScript에서의 Blocking 동작을 막아주는 COM 메서드
2정성태6/14/200640644COM 개체 관련: 1. IWebBrowser2와 IHTMLDocument2의 상호 변환 [2]
1정성태7/17/200324812스크립트: 1. IE 의 훌륭한 저장기능 - userData
... 196  [197]