【问题标题】:Can I debug codes in .a library?我可以在 .a 库中调试代码吗?
【发布时间】:2021-11-12 20:36:28
【问题描述】:

例如,我有两个项目,比如说项目 A 和项目 B。我有项目 A 和项目 B 的源代码。

然后在我的项目A中,有一些项目B制作的.a文件。项目A使用这些.a文件来编译和运行。

问题是,当我运行项目A时,我想调试那些.a文件中的代码。可以吗?如果可能,我该怎么做?

我正在使用 Visual Studio for Mac。

注意:项目 A 是用 C# 编写的,项目 B 是用 C++ 编写的。

这是一个 Xamarin 项目。

【问题讨论】:

    标签: c# c++ ios .net visual-studio-mac


    【解决方案1】:

    如果您没有项目B的源代码,则只能在汇编模式下调试。

    如果您确实有项目 B 的源代码,请确保 .a 文件保留调试信息(如 dwarf)并使用 lldb 源映射技术执行映射。

    但是,如果您有 .a 文件的源代码,为什么不直接使用项目 B 源代码构建。

    【讨论】:

    【解决方案2】:

    您需要将 Visual Studio 附加到正在运行的进程。使用 Visual Studio 附加到进程是在 Windows 上使用 Alt + Ctrl + P 完成的。

    如果您希望调试的代码在应用启动时运行,请放置断点并添加 30 秒睡眠(在任何断点之前),以便您有时间附加。

    在选择进程时,请确保通过单击选择来勾选要调试的正确代码类型...

    【讨论】:

    • 感谢您的回答,我找不到该过程,因为它是 Xamarin 项目并且它在 iPad 中运行。
    • 这是非常重要的信息,因为 Xamarin 调试可能确实存在问题,并且某些事情可能无法完全按预期工作。您应该将此注释添加到问题中。
    【解决方案3】:

    如果您可以访问这两个项目的源代码,我建议您为这两个项目创建一个解决方案,因为您可以在同一个解决方案上使用不同的语言项目(请检查此,例如:https://social.msdn.microsoft.com/Forums/en-US/737e2bf3-86ab-49aa-bafa-b3a3d05ce826/mixed-languages-in-visual-studio?forum=csharpgeneral )。

    要在 C# 项目中调试 C++ 代码,请检查当前 Visual Studio 版本的选项,如本文中所建议: Debug c++ dll in C#

    项目A(C#)设置为启动项目,如果引用正确,您应该能够调试从.a文件strong>项目 B

    【讨论】:

      【解决方案4】:

      您可以在任何 IDE 中将 Debug 和 Release 构建到单独的预设目录中。这是所有构建的好习惯 - 使用配置 -> 发布和调试。您可以将库命名为 libname_d.liblibname.a,以免混淆。

      然后您可以在调试时链接到相应的库 (libname_d.a)。这是一个选择问题——有些人可能不建议将多个项目链接到同一个解决方案(或工作区)中,因为每个单独的库都会有一组单独的测试。这些在单个项目中很难管理。

      理想情况下,每个库都可以单独编码和测试,并内置到 Release 和 Debug 中。这样可以隔离功能并遵循基于对象的设计。

      了解 .a(Linux、Mac)和 .lib(Windows)之间的区别也很重要 - 请参阅此处 - What's the difference between .lib and .a files?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-22
        • 1970-01-01
        • 2016-07-26
        • 1970-01-01
        • 1970-01-01
        • 2014-11-29
        • 2015-07-08
        • 1970-01-01
        相关资源
        最近更新 更多