代码之家  ›  专栏  ›  技术社区  ›  Dr Deo

基本C++调试问题

  •  4
  • Dr Deo  · 技术社区  · 15 年前

    我必须学习汇编语言才能优化地使用调试器吗?我注意到在调试过程中,我看到了这些密码和CPU寄存器…(EAX…废话)我假设那是集会,我应该从中以某种方式解释问题的原因。

    在不必学习汇编语言的情况下,是否有一些了解调试器的快捷方式?

    附言:我看到一本关于组装的书,差不多有1000页,我没有勇气去看它。请帮忙。
    编辑:****我正在使用代码块IDE。但我想这个问题仍然代表着MSVC++

    8 回复  |  直到 15 年前
        1
  •  11
  •   James Hopkin    15 年前

    尽管某些ASM知识在调试过程中有时会非常有用,但在您的情况下,可能需要做的一件更有价值的事情是 正确获取调试符号 .

    如果GCC通过 -g 旗帜。在Visual Studio编译器的情况下,在项目设置中启用调试符号生成(是,即使是版本生成)。如果您正在使用其他编译器,请阅读有关该主题的文档。

    最后,但不是最不重要的,如果你在Windows上,考虑下载调试符号来调试它们的二进制文件,因为它可能会让你的生活变得更美好。 很多 更容易的。在这里找到: microsoft site

        2
  •  5
  •   Greg Bacon    15 年前

    听起来好像控件跳入了一个库,而这个库的源代码不是您所拥有的,或者不是用调试信息构建的。

    至少熟悉机器的体系结构和汇编语言是有帮助的,但是严格来说,很好地使用调试器并不是必需的。

        3
  •  2
  •   Paul Nathan    15 年前

    对。为了优化调试,您必须理解汇编,它只不过是处理器所说的语言。

    这并不可怕。编程语言不会比程序集简单。

        4
  •  2
  •   Nemanja Trifunovic    15 年前

    您不必是汇编方面的专家,但我认为理解汇编代码对于调试很重要。找到一些“刚好可以通过的程序集”教程,例如 this one .

        5
  •  1
  •   Nikolai Fetissov    15 年前

    Windows上的Visual Studio或 Data Display Debugger 在UNIX将提供一个非常体面的工作,只要你用调试符号编译,让你在不知道汇编程序的情况下通过C++代码。熟悉手持式计算机体系结构,基本理解ASM语法,以及C++如何构造映射,这将使您得到更进一步的理解。

        6
  •  0
  •   ennuikiller    15 年前

    您不需要理解汇编程序来进行有效的调试。唯一一次真正需要担心的是程序集代码是当您遇到优化问题时,但是即使这样,您最好处理高级代码,而不是尝试编写更高效的程序集例程。

        7
  •  0
  •   Hamish Grubijan    15 年前

    你的平台是什么?VS2010将大大提高调试经验。

        8
  •  0
  •   Stack Overflow is garbage    15 年前

    C++不需要应用程序来存储元数据来帮助调试。如果找不到这样的元数据,那么调试器就没有太多的工作要处理。它所看到的只是正在执行的机器代码,因此它必须返回到向您显示普通的汇编代码。

    但是,编译器通常能够构建调试器可以使用的调试信息。这些基本上告诉编译器源代码看起来是什么(或者在哪里找到源文件),哪些指令与源代码的哪行匹配,允许您调试所编写的实际C++代码。

    您没有指定使用哪种编译器或调试器,所以我不能告诉您如何在特定情况下使用它。

    在gcc上,必须使用 -g 据我所知,为了生成调试信息供gdb使用。

    在VisualStudio中,它只适用于大多数情况下(虽然我相信如果您启动一个“空C++项目”),您就必须在项目属性中启用调试信息。