2

我在 AIX 上工作并且有一个不断崩溃的进程。我从来没有检查过核心文件,如果可能的话,我希望得到一些指导。我正在使用 dbx。我如何(a)确保核心文件到达我希望它去的地方,以及(b)在进程崩溃之前查看进程的状态?

谢谢!

4

2 回答 2

4

我可以逐步完成运行,但也不确定是否要调试内核。我发现这些命令可能是需要关注的。可能还有更多。

在 dbx 中运行核心后:

  1. 'where' -- 显示堆栈
  2. 'up' 或 'down' - 在帧中移动,然后你
  3. 'print var' -- 显示变量
  4. 和 'list' 或 'edit' -- 将在当前位置显示文件信息

在“检查数据”下查看这里帮助了我。

于 2012-02-07T17:53:27.727 回答
3

核心文件是在进程的当前工作目录中创建的。用 进行检查getcwd(),用chdir() 设置。

dbx [ -a ProcessID ] [ -B DebugFile ] [ -c CommandFile ] [ -I Directory ] [ -E DebugEnvironment ] [ -p oldpath=newpath:...| 路径文件 ] [ -u ] [ -F ] [ -r ] [ -x ] [ -v ] [ -C CoreFile | 对象文件[核心文件]]

将您的程序加载到 dbx 中dbx /path/to/progname /path/to/corefile,您就可以开始查看堆栈跟踪(“where”命令等)。

如果您不指定corefiledbx 将自动加载一个名为“core”的匹配文件,如果它与加载的程序位于同一目录中(并且它们匹配签名)。

阅读dbx 上的手册页,它提供了您需要的所有调试命令。

另请注意,您的程序将需要在启用调试符号的情况下进行编译(而不是稍后“剥离”),以便堆栈跟踪最有用。如果没有调试符号,您将在堆栈跟踪中看到函数名称,但仅此而已。

于 2011-02-12T17:54:36.790 回答