Oracle® Solaris Studio 12.4:使用 dbx 调试程序

退出打印视图

更新时间: 2015 年 1 月
 
 

调用安全性

通过使用 call 命令或通过输出包含调用的表达式来在要调试的进程中进行调用时,可能会导致不明显的严重中断。例如:

  • 调用可能会陷入无限循环(您可以中断该循环),或导致段故障。在许多情况下,您可以使用 pop –c 命令返回到调用方。

  • 在多线程应用程序中进行调用时,将会恢复所有线程以避免死锁,所以您可能会在进行调用的线程之外的其他线程上看到负面影响。

  • 断点条件中使用的调用可能会搞乱事件管理(请参见恢复执行)。

    dbx 进行的一些调用会安全地执行。如果遇到问题(通常是段故障)、而非通常的 Stopped with call to ...,则 dbx 将执行以下操作之一:

  • 忽略任何 stop 命令(包括那些因检测内存访问错误而使用的命令)

  • 自动发出 pop -c 命令以返回到调用方

  • 继续执行

    dbx 将在以下情况下使用安全调用:

  • display 命令输出的表达式中发生的调用。失败的调用显示为:ic0->get _data() = <call failed>

    要诊断此类故障,请尝试使用 print 命令输出表达式。

  • db_pretty_print() 函数的调用(使用 print -p 命令时除外)。

  • 事件条件表达式中使用的调用。包含失败调用的条件会计算为 false。

  • 执行 pop 命令期间为调用析构函数所做的调用。

  • 所有内部调用。