我能在一个运行着的程序中生成堆栈映象吗?

一些系统提供库函数可以提取(unwinding)出堆栈,从而(比如)你可以在一个错误处理函数中生成一个堆栈映象,但是只有一小部分系统有这些函数。

一个可能的变通方法(workaround)是让你的程序执行一个调试器调试*它自己* - 详细方法仍然根据不同系统稍有不同,但一般的概念是这样:

     void dump_stack(void)
     {
         char s[160];

         sprintf(s, "/bin/echo 'where\ndetach' | dbx -a %d", getpid());
         system(s);

         return;
     }
    

你需要根据你不同的系统对dbx的参数和命令进行加工,或者甚至换另一个调试器,比如‘gdb’,但这仍然是我见过的对于这种问题最普遍的解决方法。为此,荣誉授予Ralph Corderoy。

下面列表包含在一些系统上需要用到的命令行:

大多数使用dbx的系统
    `"/bin/echo 'where\ndetach' | dbx /path/to/program %d"'

AIX
     `"/bin/echo 'where\ndetach' | dbx -a %d"'

IRIX
     `"/bin/echo 'where\ndetach' | dbx -p %d"'
    

 » 相关连接:
怎样创建动态连接库(shared librar 怎样通过其他库文件建立新的库文件 GCC编译过程 GCC 中文手册 作者:徐明
GCC-3.4.4安装配置指南 编译的一点体会 Linux开发中库的深入思考 编译优化指南
深入理解软件包的配置、编译与安装
 » 本栏目最新帖:

Powered by PHPWind v6.0 Code © 2003-08