调试fastcgi应用程序
debugging a fastcgi application
我已经在服务器上部署了一个fastcgi应用程序。当我尝试在服务器上运行它时,它崩溃了(稍后会详细介绍)。
首先是关于本地(开发)机器的一些事实:
- 程序是C/c++程序
- 我在Ubuntu 10.0.4 LTS上开发了这个应用程序(服务器上的操作系统相同)
- 在开发过程中,我使用gdb逐步通过代码来修复初始错误
- 我在应用程序上运行ldd,发现所有需要的共享库
- 我可以在我的本地机器上测试,使用curl http://path/to/cgiapp
在对代码进行测试并在本地机器上运行之后,我构建了一个发布版本并使用Netbeans 6.9 IDE对其进行了打包
我在服务器上安装了包并运行了以下测试
-
第一次在安装的应用程序上运行ldd,我注意到一些文件没有找到。我通过将开发机器上的文件复制到应用程序正在搜索它们的位置(也许不理想)来修复此问题-但是,当我再次运行ldd时,发现所有库都
-
然后我通过在控制台运行curl http://path/to/cgiapp来测试应用程序
而不是预期的消息,有一个似乎是核心转储(即二进制流转储)到控制台。
我的问题是:
- 谁能解释为什么ldd显示所有文件(加载?)正确-但应用程序崩溃 什么可能是最可能的原因,为什么应用程序运行在我的开发机器上,但未能在服务器上运行?
- 由于应用程序在启动前崩溃,我不确定如何使用gdb来调试应用程序-显然,我会在尝试调试之前将调试版本复制到服务器。
关于上面的第3点有进一步的复杂性。该服务器是一个精简的、平均的、无头的服务器,所以它没有安装gdb。
因此,即使我找到了一种方法来调试应用程序(在它崩溃之前),我也不知道如何连接到远程进程。
如果你有什么想法,我将不胜感激。
你的问题是基于方式太多的误解。
有谁能解释为什么ldd显示所有文件(加载?)正确-但应用程序崩溃
出于同样的原因,一些应用程序运行了100次没有任何问题,然后"随机"崩溃。
不是所有的崩溃都与动态链接器有关,事实上大多数的崩溃都与此无关。其他错误,如堆损坏,缓冲区溢出,off-by- 1错误等,是更常见的原因。
应用程序在我的开发机器上运行,但在服务器上运行失败的最可能原因是什么?
你没有提供足够的数据来回答这个问题。
症状是什么?您查看过apache错误日志以寻找线索吗?什么是崩溃堆栈跟踪?服务器上缺少哪些库并进行了复制?
由于应用程序在启动前崩溃,我不确定如何使用gdb来调试应用程序-显然,我会在尝试调试之前将调试版本复制到服务器。
您不需要复制调试二进制文件来调试它(它可能有帮助,也可能没有帮助,这取决于崩溃实际发生的位置)。
回复原帖者的请求:
1. 您可以将核心转储复制到使用gdb的机器上,并在那里查看回溯。GDB -c core_name binary.name,然后bt.
2. 你怎么知道你的应用程序在启动前就崩溃了?
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- 如何使用FastCGI C/C 应用程序访问POST请求的主体
- 简单的多线程fastcgi应用程序总是崩溃
- 同一服务器上的多个并发 FastCGI 应用程序
- Apache FastCGI应用程序无法找到合适的libfcgi(Mac OS 10.8.4)
- 如何向fastcgi应用程序呼叫/发送消息
- jQuery 'get' 没有从 FastCGI 应用程序(nginx Web 服务器)C++接收正确的答案
- 有一个简单的方法,使fastcgi应用程序
- 如何用FastCGI应用程序扩展c++ HTTP服务器
- 调试fastcgi应用程序