【发布时间】:2012-10-30 08:24:53
【问题描述】:
我正在使用 AIX,并且有一个进程不断崩溃。我从来没有检查过核心文件,如果可能的话,我希望得到一些指导。我正在使用 dbx。我如何 (a) 确保核心文件在我希望它去的地方以及 (b) 在它崩溃之前查看进程的状态?
谢谢!
【问题讨论】:
我正在使用 AIX,并且有一个进程不断崩溃。我从来没有检查过核心文件,如果可能的话,我希望得到一些指导。我正在使用 dbx。我如何 (a) 确保核心文件在我希望它去的地方以及 (b) 在它崩溃之前查看进程的状态?
谢谢!
【问题讨论】:
我可以逐步运行,但也不确定是否要调试内核。 我发现这些命令可能是需要关注的。可能还有更多。
在 dbx 中运行核心后:
在“检查数据”下查看here 帮助了我。
【讨论】:
核心文件在进程的当前工作目录中创建。检查getcwd(),设置chdir()。
dbx [ -a ProcessID ] [ -B DebugFile ] [ -c CommandFile ] [ -I Directory ] [ -E DebugEnvironment ] [ -p oldpath=newpath:...|路径文件 ] [ -u ] [ -F ] [ -r ] [ -x ] [ -v ] [ -C CoreFile |对象文件[核心文件]]
使用dbx /path/to/progname /path/to/corefile 将您的程序加载到dbx 中,然后您就可以开始查看您的堆栈跟踪(“where”命令等)。
如果您没有指定corefile dbx 将自动加载一个名为“core”的匹配文件,如果它与加载的程序位于同一目录中(并且它们匹配签名)。
阅读man page on dbx,它提供了您需要的所有调试命令。
另外请注意,您的程序将需要在启用调试符号的情况下进行编译(而不是稍后“剥离”),以便堆栈跟踪最有用。如果没有调试符号,您将在堆栈跟踪中看到函数名称,但不会看到其他内容。
【讨论】: