我刚刚在我的“hello world”应用程序(c++)上启动了totalview,我只能查看汇编代码。
我需要设置任何设置/标志来查看源代码吗?Menubar->View->Source As->Source 对我不起作用。
我试图调试的应用程序只是一个 cout << "Hello World" 应用程序,只是为了让调试器启动并运行。
让我们从简单的东西开始。
您是否使用“-g”调试标志编译了您的应用程序?调试器依赖编译器为其提供符号表和行号表,以将可执行文件中发生的情况映射回源代码。如果没有该 -g 标志(或者如果您随后剥离了您的应用程序),则该信息将不存在,并且汇编调试是您所希望的最好的。
如果您确实使用 -g 进行了编译,那么源代码和可执行文件都在同一个目录中,或者如果在您编译它们之后它们没有被移动?编译器只知道源代码和可执行文件在创建时的位置,如果您移动它们,有时调试器将无法找到源代码文件。在这种情况下,您可能需要通过定义源代码搜索路径来为其提供一些帮助。
在这里写信告诉我 -g 是否解决了您的问题。如果没有,我们可以查看搜索路径等。
干杯,克里斯
我意识到 Jason94 几乎可以肯定以其他方式解决了他的问题,但我想我可以在这里回答这个问题,因为这是一个好问题。
对于这种特殊情况,知道程序是否是多线程的会很有趣。TotalView 旨在让您使用多线程程序,它有一个可能会让用户感到惊讶的特性。默认情况下,它不会始终将您的注意力集中在命中断点的线程上。因此,您的程序实际上可能已经停止在另一个线程中的第二个断点处。
假设您有 6 个线程(我们将它们编号为 0 - 5),并且您在例程中设置了一个断点。线程 0 是您关注的线程,您点击“开始”。程序运行,线程 4 首先到达断点。默认情况下,当断点被击中时,断点将停止整个过程。在调试器中,您可能会看到程序集表示线程 4 遇到断点时线程 0 的位置。您可以检查根窗口或线程窗格以查看其他线程的状态,您可能会看到其中一个线程显示“B2”(对于断点 2)。然后您可以单击该线程,TotalView 会将您重新聚焦到该线程,您会看到它位于断点处。
我们为什么要这样做?好吧,因为我们认为仅仅因为另一个线程遇到断点而让您的注意力“从您身上剥离”是令人困惑/不安的。所以默认情况下,我们让用户控制他们的线程焦点。
您可以更改一个首选项,它会告诉 totalview 将流程窗口重新聚焦到“事件现场”。如果您希望 TotalView 将注意力重新集中在断点上,您可以设置它,但请注意,当您这样做时,您可能会从一个线程跳到下一个线程。
另一种可能性是 TotalView 出于某种原因停止了进程,而不是遇到了断点。程序有段错误吗?检查进程窗口顶部的状态栏以查看线程和进程的状态。
无论如何 - 只是想张贴这个记录。