在 Ubuntu Linux 15.10 平台上,託管 C# 執行檔如何使用 Monodevelop 偵錯器進入非託管 C++ 共用物件的程式碼?

在 Ubuntu Linux 15.10 平台上,託管 C# 執行檔如何使用 Monodevelop 偵錯器進入非託管 C++ 共用物件的程式碼?

我們想知道在 Mono 環境中運行的託管 C# 可執行檔如何使用 Ubuntu Linux 15.10 平台上的 Monodevelop 偵錯器進入非託管 C++ 共享物件的程式碼。 Monodevelop版本是5.5,mono版本是Mono JIT編譯器版本3.2.8(Debian 3.2.8+dfsg-4ubuntu4),.NET版本是4.5。我已經使用 gdb 進入非託管 C++ 共享物件的程式碼。但是,我們希望在 Ubuntu Linux 15.10 平台上僅使用 Monodevelop 偵錯器來處理託管 C# 程式碼和非託管 C# 程式碼。先感謝您。

答案1

我剛剛收到通知,基本上這不受支持,有人嘗試讓這項工作發揮作用,但缺乏時間和興趣來使其發揮作用。

https://github.com/mono/debugger-libs/tree/lldb-debugging

PullRequest 總是受歡迎的

答案2

  1. 將您的 C#/.NET 解決方案載入到 Monodevelop 中,建置並偵錯執行

  2. ps -ef 請注意,mono 本身不會分叉進程,除非您的程式碼這樣做...您的託管 C# xyz.exe 已載入到 mono 進程內,並作為一個沒有分叉的進程執行

  3. 識別感興趣的 mono 進程的進程 id(PID)" /usr/bin/mono --debug --debugger-agent 在本實際範例中為 7575

  4. 應使用 -g 編譯非託管 C++ 共享物件以建立符號表。

    ~/InteroperabilityTest/MySQLVersion/Debug$ sudo gdb 7575 GNU gdb (Ubuntu 7.10-1ubuntu2) 7.10 版權所有 (C) 2015 Free Software Foundation, Inc. 授權 GPLv3+:GNU GPL 版本 3 或更高版本http://gnu.org/licenses/gpl.html 這是免費軟體:您可以自由更改和重新分發它。在法律允許的範圍內,不提供任何保證。輸入“顯示複製”和“顯示保固”以了解詳細資訊。該 GDB 被配置為“x86_64-linux-gnu”。鍵入“顯示配置”以取得配置詳細資訊。有關錯誤報告說明,請參閱: http://www.gnu.org/software/gdb/bugs/。線上尋找 GDB 手冊和其他文件資源: http://www.gnu.org/software/gdb/documentation/。如需協助,請輸入「協助」。輸入「apropos word」來搜尋與「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.so。 [新執行緒 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 :: 分配器, std:: 分配器>> > >::_Rb_tree (this=0x7fffffffffd160) 位於/usr/include/c++/5/bits/stl_tree.h:807 807 _Rb_tree() { } (gdb) 步驟std :: _Rb_tree,std::分配器>>,std::_Select1st,std::分配器>>>,std::less,std::分配器,std::分配器>>>::_Rb_tree_impl,假>::_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)] sem_waitcommon.c:42 42 sem_waitcommon.c: futex_abstimed_wait 中的0x00007ffff74b60c9 (cancel=abate=0) 42 42 sem_waitcommon.c :沒有這樣的檔案或目錄。 (gdb)

請讓我知道,如果你有任何問題。

相關內容