우리는 Mono 환경에서 실행되는 관리되는 C# 실행 파일이 어떻게 Ubuntu Linux 15.10 플랫폼의 Monodevelop 디버거를 사용하여 관리되지 않는 C++ 공유 개체의 코드로 들어갈 수 있는지 알고 싶습니다. Monodevelop 버전은 5.5, 모노 버전은 Mono JIT 컴파일러 버전 3.2.8(Debian 3.2.8+dfsg-4ubuntu4), .NET 버전은 4.5입니다. 저는 관리되지 않는 C++ 공유 개체 코드를 사용하기 위해 gdb를 사용했습니다. 그러나 우리는 관리형 C# 코드와 비관리형 C# 코드 모두에 Ubuntu Linux 15.10 플랫폼의 Monodevelop 디버거만 사용하려고 합니다. 미리 감사드립니다.
답변1
나는 방금 이것이 기본적으로 지원되지 않으며 누군가가 이 작업을 수행하려고 시도했지만 작동시킬 시간과 관심이 부족하다는 알림을 받았습니다.
https://github.com/mono/debugger-libs/tree/lldb-debugging
PullRequest는 언제나 환영합니다
답변2
C#/.NET 솔루션을 Monodevelop에 로드하고 빌드 및 디버그 실행
ps -ef 코드가 그렇지 않으면 모노 자체는 프로세스를 분기하지 않습니다. 관리되는 C# xyz.exe는 모노 프로세스 내부에 로드되어 분기되지 않은 프로세스로 실행됩니다.
관심 있는 모노 프로세스의 프로세스 ID(PID)를 식별합니다." /usr/bin/mono --debug --debugger-agent 이 실제 예에서는 7575입니다.
관리되지 않는 C++ 공유 객체는 -g로 컴파일하여 기호 테이블을 생성해야 합니다.
~/InteroperabilityTest/MySQLVersion/Debug$ sudo gdb 7575 GNU gdb (Ubuntu 7.10-1ubuntu2) 7.10 Copyright (C) 2015 Free Software Foundation, Inc. 라이센스 GPLv3+: GNU GPL 버전 3 이상http://gnu.org/licenses/gpl.html 이것은 무료 소프트웨어이므로 자유롭게 변경하고 재배포할 수 있습니다. 법이 허용하는 한, 어떠한 보증도 제공되지 않습니다. 자세한 내용을 보려면 "사본 표시" 및 "보증 표시"를 입력하세요. 이 GDB는 "x86_64-linux-gnu"로 구성됩니다. 구성 세부정보를 보려면 "showconfiguration"을 입력하세요. 오류 보고 지침은 다음을 참조하세요. http://www.gnu.org/software/gdb/bugs/. GDB 매뉴얼과 기타 문서 리소스를 온라인에서 찾아보세요: http://www.gnu.org/software/gdb/documentation/. 도움이 필요하면 "help"를 입력하세요. "단어"와 관련된 명령을 검색하려면 "apropos word"를 입력하세요... 7575: 해당 파일이나 디렉터리가 없습니다. (gdb) 파일 BuildIPCameraListLinux.exe BuildIPCameraListLinux.exe에서 기호를 읽는 중... (디버그 기호를 찾을 수 없음)... 완료. (gdb) ClickItCameraList.cpp:176 기호 테이블이 로드되지 않았습니다. "파일" 명령을 사용하십시오. 향후 공유 라이브러리 로드에 중단점을 설정하시겠습니까? (y 또는 [n]) y 중단점 1(ClickItCameraList.cpp:176) 보류 중입니다. (gdb) 실행 실행기: /home/venkat/InteroperabilityTest/MySQLVersion/Debug/BuildIPCameraListLinux.exe 경고: 선택한 아키텍처 i386은 보고된 대상 아키텍처 i386:x86-64와 호환되지 않습니다. 경고: 대상 제안이 아키텍처에 의해 거부되었습니다. add-symbol - 이 대상 프로세스는 메모리의 파일을 지원하지 않습니다. 7592 새 프로그램 실행 중: /usr/bin/mono-sgen [libthread_db로 스레드 디버깅 활성화] 호스트 libthread_db 라이브러리 "/lib/x86_64-linux-gnu" /libthread_db 사용. 그래서.1". [새 스레드 0x7ffff471f700 (LWP 7597)] 중단점 1, CreateSupportedCameraList () at ./ClickItCameraList.cpp:176 176 { (gdb) 180단계 std::map >vendorMap; (gdb) 단계 std::map, std:: allocator >, std::less, std::allocator, std::allocator > > > >::map( this=0x7fffffffd160) /usr/include/c++/5 /bits/stl_map.h:166 166에 위치: _M_t( ) { } (gdb) 단계 std::_Rb_tree, std::allocator >>, std::_Select1st, std::allocator >>>, std::less, std::allocator, std::allocator>> > > ::_Rb_tree (this=0x7ffffffffd160) /usr/include/c++/5/bits/stl_tree.h:807 807 807 _Rb_tree() { } (gdb) 단계 std::_Rb_tree, std::allocator>>, std: :_Select1st, std::allocator >>>, std::less, std::allocator, std::allocator>>>>::_Rb_tree_impl, false >::_Rb_tree_impl (this=0x7ffffffffd160) / usr/include/c++ /5/bits/stl_tree.h:588 588 _M_node_count(0) (gdb) 계속하세요. 여기에 저장합니다. 알겠습니다. 프로그램이 SIGPWR, 정전/재시작 신호를 수신합니다. [스레드 0x7ffff471f700(LWP 7597)으로 전환] sem_waitcommon.c:42 42 sem_waitcommon.c: 0x00007ffff74b60c9 in futex_abstimed_wait (cancel=true, private=, abstime=0x0, Expect=0, futex=0x98a680): 42 4 2 sem_waitcommon.c :해당 파일이나 디렉터리가 없습니다. (gdb)
궁금한 점이 있으면 알려주시기 바랍니다.