如何使用callgrind进行调试,在单进程模式下调用Apache2

时间:2012-11-28 13:24:08

标签: apache gdb valgrind callgrind

所有 我一直试图让apache在信号进程/调试模式下运行,以便使用callgrind,并有一个简单的单个进程来进行调试。

有没有人有在单进程模式下运行apache的经验?

我尝试过httpd -X。这可以通过一个进程启动apache,(很好)但是在这样运行的时候还没有找到一种干净的关闭它们的方法。唯一有效的方法是kill -9。这也打乱了任何调试输出,因此在使用callgrind时不会让我更进一步。我正在运行的完整命令,对于那些感兴趣的人是:

valgrind --tool=callgrind  /path/to/apache2/httpd -X

任何想法都赞赏。
谢谢

2 个答案:

答案 0 :(得分:1)

有两个问题需要克服:

  1. Apache需要一堆环境变量
  2. Apache从root用户删除到apache / www-data,这会阻止valgrind写入文件
  3. 在ubuntu上,这应该可以解决问题:

    source /etc/apache2/envvars
    valgrind --tool=callgrind /usr/sbin/apache2 -X
    

    在RHEL / centos / fedora上(未经测试):

    source /etc/sysconfig/httpd
    valgrind --tool=callgrind /usr/sbin/httpd -X
    

    加载后,在访问站点之前,使callgrind文件全局可写(valgrind将在完成时删除临时文件):

    chmod 777 /tmp/vgdb* callgrind*
    

    完成后,请记住将callgrind文件的权限更改为更安全的文件。

    Here's my blog post记录了我自己努力完成这项工作的努力。

答案 1 :(得分:0)

针对apache进程的简单kill -TERM应该告诉它关闭。