如何在totalview中查看源代码?

时间:2010-07-20 06:29:55

标签: c++ totalview

我刚刚在我的“hello world”应用程序(c ++)中启动了totalview,我只能查看汇编代码。

我需要设置任何设置/标志来查看源代码吗?菜单栏 - >查看 - >来源As->来源对我不起作用。

我试图调试的应用程序只是一个cout<< “Hello World”应用程序,只是为了启动并运行调试器。

2 个答案:

答案 0 :(得分:6)

让我们从简单的东西开始吧。

您是否使用'-g'调试标志编译了应用程序?调试器依赖于编译器为其提供符号表和行号表,以将可执行文件中发生的事情映射回源代码。如果没有-g标志(或者如果你随后剥离你的应用程序),那么信息将不存在,并且汇编调试是你所希望的最好的。

如果使用-g进行编译,源和可执行文件都在同一目录中,或者如果没有,那么在编译它们之后它们是否被移动了?编译器只在创建它们时才知道源和可执行文件的位置,如果你移动它们,那么有时调试器将无法找到源代码文件。在这种情况下,您可能需要通过定义源代码搜索路径来提供帮助。

回到这里,让我知道-g修复了你的问题。如果不是,我们可以查看搜索路径等。

干杯, 克里斯

答案 1 :(得分:2)

我意识到Jason94几乎肯定以其他方式解决了他的问题,但我想我可以在这里回答这个问题,因为这是一个很好的问题。

对于这种特殊情况,了解程序是否是多线程的将是有趣的。 TotalView旨在让您使用多线程程序,它具有可能让用户感到惊讶的特性。默认情况下,它不会始终将您的注意力集中在遇到断点的线程上。所以你的程序实际上可能已停在另一个线程的第二个断点处。

想象一下,你有6个线程(我们将它们编号为0 - 5),并在例程中设置断点。线程0是你关注的那个,你点击“go”。程序运行,线程4首先命中断点。默认情况下,断点将在命中断点时停止整个过程。在调试器中,您可能会看到程序集表示线程4到达断点时线程0的位置。 您可以检查根窗口或线程窗格以查看其他线程的状态,您可能会看到其中一个线程显示“B2”(对于断点2)。然后你可以单击该线程,TotalView将重新聚焦到该线程,你会看到它位于断点处。

为什么我们这样做?好吧,因为我们认为只是因为另一个线程遇到了断点而让你的焦点“脱离了你”令人困惑/不安。因此,默认情况下,我们让用户控制其线程焦点。

首选您可以更改哪个会告诉totalview将流程窗口重新聚焦到“事件的网站”。您可以设置如果您希望将TotalView重新关注断点,但请注意,当您这样做时,您可能会从一个线程反弹到另一个线程。

另一种可能性是TotalView因断点被击中而出于某种原因而停止了该过程。程序是否有段落错误?检查进程窗口顶部的状态栏,以查看线程和进程的状态。

无论如何 - 只想发布此内容以供记录。