
우리는 Ubuntu Linux 15.10 플랫폼에서 Monodevelop 디버거를 사용하여 모노 환경에서 실행되는 관리되는 C# 실행 파일이 관리되지 않는 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입니다.
Unmanaged 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) break ClickItCameraList.cpp:176 기호 테이블이 로드되지 않았습니다. "파일" 명령을 사용하세요. 향후 공유 라이브러리 로드 시 중단점을 보류하시겠습니까? (y 또는 [n]) y 중단점 1(ClickItCameraList.cpp:176)이 보류 중입니다. (gdb) 실행 시작 프로그램: /home/venkat/InteroperabilityTest/MySQLVersion/Debug/BuildIPCameraListLinux.exe 경고: 선택한 아키텍처 i386은 보고된 대상 아키텍처 i386:x86-64 경고: 아키텍처가 거부됨 대상 제공 설명 add-symbol- file-from-memory는 이 대상 프로세스에 지원되지 않습니다. 7592는 새 프로그램 /usr/bin/mono-sgen을 실행 중입니다. [libthread_db를 사용한 스레드 디버깅 활성화] 호스트 libthread_db 라이브러리 "/lib/x86_64-linux-gnu/libthread_db.so를 사용합니다. 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=0x7ffffffd160) /usr/include/c++/5/bits/stl_tree.h: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=0x7fffffffd160) /usr/include/c++/5/bits/stl_tree.h:588 588 _M_node_count(0) (gdb) 계속 계속됩니다. 나는 여기에 있다. 저장 OKAY 프로그램 수신 신호 SIGPWR, 정전/재시작. [스레드 0x7ffff471f700 (LWP 7597)로 전환] 0x00007ffff74b60c9 in futex_abstimed_wait (cancel=true, private=, abstime=0x0, Expect=0, futex=0x98a680 ) at sem_waitcommon.c:42 42 sem_waitcommon.c: 해당 파일 또는 디렉터리 없음 . (gdb)
궁금한 점이 있으면 알려주시기 바랍니다.