Chinaunix

标题: 求教关于arm环境中gprof生成gmon.out中时间显示问题 [打印本页]

作者: xisacihong    时间: 2010-10-11 17:07
标题: 求教关于arm环境中gprof生成gmon.out中时间显示问题
小菜在fedora 7 中用交叉编译环境编译一个程序 添加了 -pg项,然后将程序放在arm开发板上去跑,发现其中关于时间的统计显示 inf nan

Each sample counts as inf seconds.
      4   %   cumulative   self              self     total
      5  time   seconds   seconds    calls  Ts/call  Ts/call  name
      6  23.08       inf      inf                             RequireTestPointLimitValPara
      7  15.38       inf      inf                             RB_Downlink_NonNetworkNodesInfo
      8  15.38       inf      inf                             RB_Downlink_SetNodeFixRoute
      9   7.69       inf      inf                             DL698_AFN0BH_RequireTaskData_ProcessAPP
     10   7.69       inf      inf                             GetMeterSwitchOperationCounterAndTime
     11   7.69       inf      inf                             RB_Downlink_ReportNodeInfo
     12   7.69       inf      inf                             RequireCapacitorProtectPara
     13   7.69       inf      inf                             SetCapacitorAddAndDelRunPara
     14   7.69       inf      inf                             _update_path_graph
     15   0.00       inf      nan    81508      nan      nan  APP_GetNextApp
     16   0.00       inf      nan     5824      nan      nan  APP_GetHeartBeatInterval
     17   0.00       inf      nan     5822      nan      nan  APP_GetFirstApp
     18   0.00       inf      nan     5822      nan      nan  APP_NeedAck
     19   0.00       inf      nan     5822      nan      nan  APP_NeedLogin
     20   0.00       inf      nan     5822      nan      nan  CommSurpass_Checker
     21   0.00       inf      nan     5822      nan      nan  DC2MS_CurrCommFlowBytes
     22   0.00       inf      nan     5822      nan      nan  Event_Poll
     23   0.00       inf      nan     5822      nan      nan  Poll
     24   0.00       inf      nan     5822      nan      nan  ScanAutoReportTask
     25   0.00       inf      nan     5822      nan      nan  UpPacket_GetRecvPacket
     26   0.00       inf      nan       33      nan      nan  sched_getParamValue
     27   0.00       inf      nan       14      nan      nan  APP_AddAppElem
     28   0.00       inf      nan       14      nan      nan  DL698_AppRegist


请问如何解决
作者: xisacihong    时间: 2010-10-11 17:08
自个顶下,,希望大家给予帮助,谢谢
作者: Tinnal    时间: 2010-10-11 19:50
本帖最后由 Tinnal 于 2010-10-11 19:51 编辑

回复 1# xisacihong

查阅了一下gprof的代码(gprof的代码在编译器的工具链的原码中),并没有inf,或nan字符串的出现,证明这是一个gprof都不可预料的错误。google和baidu了一下inf和nan得到如下结果:
进行浮点数编程时,如果没有注意,常常会出现输出类似 1.#IND, 1.#INF 或者 nan, inf 之类奇怪的输出。这通常隐含了浮点数操作的异常。

特殊浮点数的含义
1.#INF / inf:这个值表示“无穷大 (infinity 的缩写)”,即超出了计算机可以表示的浮点数的最大范围(或者说超过了 double 类型的最大值)。例如,当用 0 除一个整数时便会得到一个1.#INF / inf值;相应的,如果用 0 除一个负整数也会得到 -1.#INF / -inf 值。

-1.#IND / nan:这个的情况更复杂,一般来说,它们来自于任何未定义结果(非法)的浮点数运算。"IND"是 indeterminate 的缩写,而"nan"是 not a number 的缩写。产生这个值的常见例子有:对负数开平方,对负数取对数,0.0/0.0,0.0*∞, ∞/∞ 等。


可以推测gprof在内部运算是出错。
分析最有可能原因为:
因为-pg是一个编译选项,编译器要跟据pg选项生成特定测量代码,这部份代码在程序运行时收集数据,并在程序退出时写盘,以备gprof程序分析。gprof本来就是编译器的一部份,而你采用arm的编译器生成程序,却用主机的gprof来解释数据。数据的格式可能不一致,导致PC版本的gprof解释出错。

建议你用回交叉编器器带的gprof进行分析。
作者: xisacihong    时间: 2010-10-12 09:44
顶不住了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2