跳过导航链接 | |
退出打印视图 | |
Oracle Solaris Studio 12.3:使用 dbx 调试程序 Oracle Solaris Studio 12.3 Information Library (简体中文) |
在所调试程序的执行时间方面,各种事件都有不同程度的开销。但某些事件(如最简单的断点)几乎没有开销。基于单个断点的事件的开销非常小。
多种可能会导致生成数百个断点的断点(如 inclass)仅在创建期间有开销。这是因为 dbx 使用永久性断点,这些断点一直保留在进程中,每次中断时并不会被移除,且每次执行 cont 命令时都会被置入。
注 - 就 step 和 next 而言,缺省情况下,恢复进程前会移除所有断点,完成相应步骤后会立即重新插入这些断点。如果使用大量断点或在多产类中使用多个断点,step 命令和 next 命令的执行速度会显著降低。可使用 dbx step_events 环境变量控制是否移除断点并在每次执行 step 命令或 next 命令后重新插入断点。
速度最慢的事件是利用自动单步执行功能的事件。在单步执行每个源代码行的 trace step 命令中,这可能非常明显。其他一些事件(如 stop change expression 或 trace cond variable)不仅自动单步执行,而且还必须在执行每一步时对表达式或变量求值。
这些事件的速度非常慢,但通常可以使用 -in 修饰符将事件与函数绑定来克服速度慢这一问题。例如:
trace next -in mumble stop change clobbered_variable -in lookup
请勿使用 trace -in main,这是因为 trace 在 main 调用的函数中也有效。而是在怀疑 lookup() 函数破坏变量的情况下使用它。