在 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。 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 ::分配器,std::分配器> > > >::_Rb_tree (this=0x7fffffffd160) 位于 /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=true、private=、abstime=0x0、expected=0、futex=0x98a680 ):42 42 sem_waitcommon.c:没有这样的文件或目录。 (gdb)

请让我知道,如果你有任何问题。

相关内容