【问题标题】:How to use watchmalloc for background processes如何将 watchmalloc 用于后台进程
【发布时间】:2012-02-18 14:52:02
【问题描述】:

我正在使用 Solaris x86 机器。我的应用程序因以下堆栈跟踪而崩溃。

fed155f9 realfree (816d878) + 97 fed151be _malloc_unlocked (7e0, 8047eac, 8047e3c, feffb7d8, 8047bac, 809dd6a) + 18c fed15008 malloc (7e0) + 34

我需要使用"watchmalloc" 对其进行调试。我的应用程序将由系统 inetd 进程启动。我无法控制它的执行。请让我知道在这种情况下如何使用watchmalloc

我设置了以下环境变量,它仅对从 shell 启动的进程有帮助。

LD_PRELOAD=watchmalloc.so.1 MALLOC_DEBUG=WATCH,RW

【问题讨论】:

    标签: memory malloc solaris core ld-preload


    【解决方案1】:

    只需用设置所需变量的包装器替换您的应用程序,然后启动真正的应用程序。

    例如:

    cd <path to myapp>
    mv myapp myapp.real
    cat > myapp <<%
    #!/bin/ksh
    export LD_PRELOAD=watchmalloc.so.1
    export MALLOC_DEBUG=RW
    exec $(dirname $0)/myapp.real "$@"
    %
    chmod +x myapp
    

    【讨论】:

      【解决方案2】:

      如何将您的应用重命名为 myapp.bin,然后安装一个小的 shell 脚本,例如:

      ! /bin/sh

      LD_PRELOAD=watchmalloc.so.1 MALLCO_DEBUG=WATCH,RW 导出 LD_PRELOAD MALLOC_DEBUG 执行 myapp.bin "$@"

      【讨论】:

      • 谢谢。解决问题的好方法。它解决了我的问题。我可以使用 watchmalloc.so.1
      猜你喜欢
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 2013-09-03
      • 2021-09-29
      相关资源
      最近更新 更多