代码之家  ›  专栏  ›  技术社区  ›  bash0r CheryJose

等效于.NET/Mono应用程序的ldd

  •  2
  • bash0r CheryJose  · 技术社区  · 10 年前

    我目前在MonoDevelop和Mono运行时方面遇到了一些问题。具体来说,当我在MonoDevelop中运行用NUnit创建的单元测试时,我收到了一个“Unix传输错误”。我在某个地方读到,这是由windows版本的DLL引起的,我想检查NUnit库“链接到”哪些库。

    所以我在寻找一个等效的ldd,而不必自己写。。。

    我没有发现类似的东西,有什么吗?

    提前感谢。

    2 回复  |  直到 10 年前
        1
  •  4
  •   bonh R.C    10 年前

    如果你出现 MONO_LOG_LEVEL ,您可以看到Mono尝试在运行时解析程序集依赖关系。这将遍历全局程序集缓存和本地目录,这可能有助于您更好地了解应用程序所需的特定.dll。

    示例(显示无法解析的.dll):

    $ MONO_LOG_LEVEL=debug mono Clojure.Main.exe
    
    ...
    Mono: Assembly Loader probing location: '/usr/lib/mono/gac/Clojure/1.5.0.0__cf3caecd327a2fa9/Clojure.dll'.
    Mono: Assembly Loader probing location: '/usr/lib/Clojure.dll'.
    Mono: Assembly Loader probing location: '/usr/lib/mono/4.5/Facades/Clojure.dll'.
    Mono: Assembly Loader probing location: '/usr/lib/mono/gac/Clojure/1.5.0.0__cf3caecd327a2fa9/Clojure.exe'.
    Mono: Assembly Loader probing location: '/usr/lib/Clojure.exe'.
    Mono: Assembly Loader probing location: '/usr/lib/mono/4.5/Facades/Clojure.exe'.
    Mono: The following assembly referenced from /home/bonh/foo/Clojure.1.5.0.2/tools/net40/Clojure.Main.exe could not be loaded:
     Assembly:   Clojure    (assemblyref_index=1)
     Version:    1.5.0.0
     Public Key: cf3caecd327a2fa9
    etc.
    
        2
  •  0
  •   jariq    10 年前

    关于这个主题的有用信息可以在Scott Hanselman的博客文章中找到 Back to Basics: Using Fusion Log Viewer to Debug Obscure Loader Errors :

    当涉及到装配时,需要了解三个“时间”:

    • 在发生之前绑定-你想要什么?
      ILDASM或Reflector将告诉您程序集需要什么(编译了什么 反对)
    • 发生时绑定-看起来在哪里?
      Fusion(程序集绑定日志查看器)将显示所有程序集绑定,如果您 将HKLM\Software\Microsoft\Fusion\ForceLog注册表值设置为1
    • 发生后绑定-你得到了什么?
      Process Explorer将告诉您在内存中加载了什么DLL(程序集)以及从何处加载 它来了。

    我相信 Process Explorer 还应与Mono运行时一起工作,并应向您显示MonoDevelop的运行实例使用了哪些库。

    顺便说一下,我在测试名为非托管库的代码时看到了unix传输错误,这导致了segfault(内存损坏),所以请记住,您的问题可能不是由NUnit本身引起的。