调试fastcgi应用程序

debugging a fastcgi application

本文关键字:应用程序 fastcgi 调试      更新时间:2023-10-16

我已经在服务器上部署了一个fastcgi应用程序。当我尝试在服务器上运行它时,它崩溃了(稍后会详细介绍)。

首先是关于本地(开发)机器的一些事实:

  1. 程序是C/c++程序
  2. 我在Ubuntu 10.0.4 LTS上开发了这个应用程序(服务器上的操作系统相同)
  3. 在开发过程中,我使用gdb逐步通过代码来修复初始错误
  4. 我在应用程序上运行ldd,发现所有需要的共享库
  5. 我可以在我的本地机器上测试,使用curl http://path/to/cgiapp

在对代码进行测试并在本地机器上运行之后,我构建了一个发布版本并使用Netbeans 6.9 IDE对其进行了打包

我在服务器上安装了包并运行了以下测试

  1. 第一次在安装的应用程序上运行ldd,我注意到一些文件没有找到。我通过将开发机器上的文件复制到应用程序正在搜索它们的位置(也许不理想)来修复此问题-但是,当我再次运行ldd时,发现所有库都

  2. 然后我通过在控制台运行curl http://path/to/cgiapp来测试应用程序

而不是预期的消息,有一个似乎是核心转储(即二进制流转储)到控制台。

我的问题是:

  1. 谁能解释为什么ldd显示所有文件(加载?)正确-但应用程序崩溃
  2. 什么可能是最可能的原因,为什么应用程序运行在我的开发机器上,但未能在服务器上运行?
  3. 由于应用程序在启动前崩溃,我不确定如何使用gdb来调试应用程序-显然,我会在尝试调试之前将调试版本复制到服务器。

关于上面的第3点有进一步的复杂性。该服务器是一个精简的、平均的、无头的服务器,所以它没有安装gdb。

因此,即使我找到了一种方法来调试应用程序(在它崩溃之前),我也不知道如何连接到远程进程。

如果你有什么想法,我将不胜感激。

你的问题是基于方式太多的误解。

有谁能解释为什么ldd显示所有文件(加载?)正确-但应用程序崩溃

出于同样的原因,一些应用程序运行了100次没有任何问题,然后"随机"崩溃。

不是所有的崩溃都与动态链接器有关,事实上大多数的崩溃都与此无关。其他错误,如堆损坏,缓冲区溢出,off-by- 1错误等,是更常见的原因。

应用程序在我的开发机器上运行,但在服务器上运行失败的最可能原因是什么?

你没有提供足够的数据来回答这个问题。

症状是什么?您查看过apache错误日志以寻找线索吗?什么是崩溃堆栈跟踪?服务器上缺少哪些库并进行了复制?

由于应用程序在启动前崩溃,我不确定如何使用gdb来调试应用程序-显然,我会在尝试调试之前将调试版本复制到服务器。

您不需要复制调试二进制文件来调试它(它可能有帮助,也可能没有帮助,这取决于崩溃实际发生的位置)。

回复原帖者的请求:
1. 您可以将核心转储复制到使用gdb的机器上,并在那里查看回溯。GDB -c core_name binary.name,然后bt.
2. 你怎么知道你的应用程序在启动前就崩溃了?

开始将内容记录到文件中,而不是仅仅依赖于实时gdb会话。