【发布时间】:2016-02-24 20:53:55
【问题描述】:
当使用 LLDB 调试一个简单程序时,如果我将调试器设置为在入口处停止,我看不到当前帧的源代码,只在汇编时。
如果设置了断点,那么我会在到达断点后看到每一帧的源代码。
如何在不设置断点的情况下查看当前帧的源代码?
我想在不知道可能运行哪些代码行或函数的情况下跟踪程序的流程。
请注意,list 是不够的,因为它不显示活动行,只是一些来源。
我正在调试 C++ 代码,不过我认为这并不重要。
【问题讨论】:
当使用 LLDB 调试一个简单程序时,如果我将调试器设置为在入口处停止,我看不到当前帧的源代码,只在汇编时。
如果设置了断点,那么我会在到达断点后看到每一帧的源代码。
如何在不设置断点的情况下查看当前帧的源代码?
我想在不知道可能运行哪些代码行或函数的情况下跟踪程序的流程。
请注意,list 是不够的,因为它不显示活动行,只是一些来源。
我正在调试 C++ 代码,不过我认为这并不重要。
【问题讨论】:
我不确定您所说的“当前帧”是什么意思。
如果您在调试器中停止程序(使用断点或中断它),那么您应该看到您停止的帧的源代码(如果它是具有源代码的帧)。
但调试器不会观察您的程序在运行时正在做什么。如果它试图这样做,它会过多地干扰程序执行,减慢它的速度,改变线程调度等。调试器会非常努力地不这样做。
因此,当程序没有停止时,它无法告诉您程序中正在执行哪些堆栈帧。还有其他工具,例如示例,它使用基于时间的堆栈采样来向您展示程序流程的大致轮廓,但由于这些只是某个时间间隔的示例,它们不会获得所有细节。
您可以通过在调用上放置自动继续断点并使用执行回溯或源列表的命令来观察调用的某些子集。但是,根据您想要观看的调用的热度,这可能会大大降低执行速度。
【讨论】: