基本的C ++调试问题

时间:2010-01-06 15:59:09

标签: c++ debugging assembly

我是否必须学习汇编语言才能最佳地使用调试器?我注意到在调试过程中,我看到了这些神秘的代码和CPU寄存器......(eax ......等等)。我将假设这是集会,我应该以某种方式从中解释问题的原因。

在不学习汇编语言的情况下,是否有一些理解调试器的捷径?

PS:我看到一本关于装配的书已经差不多有1000页了,而且我没有胃口可以通过它。请帮忙。
已编辑:****我正在使用codeBlocks ide。但我想这个问题仍然适用于MSVC ++

8 个答案:

答案 0 :(得分:11)

虽然有些asm知识有时在调试过程中非常方便,但在你的情况下,更有价值的事情是正确调试符号

如果gcc传递了-g标志。对于Visual Studio编译器,在项目设置中启用调试符号生成(是的,甚至是发布版本)。如果您正在使用其他编译器,请阅读有关该主题的文档。

最后,但并非最不重要的是,如果您使用的是Windows,请考虑为其二进制文件下载调试符号,因为它可能会让您的生活更轻松。在此处查找:microsoft site

答案 1 :(得分:5)

听起来像控件跳进了一个库,你的源代码没有,或者没有用调试信息构建。

至少熟悉机器的体系结构和汇编语言可能有所帮助,但使用调试器并不是绝对必要。

答案 2 :(得分:2)

是。为了进行最佳调试,您必须了解汇编,这只不过是处理器所说的语言。

这并不可怕。编程语言并不比汇编语言简单。

答案 3 :(得分:2)

您不必是装配专家,但我会说理解装配代码对于调试很重要。找一些“刚刚足够的装配”教程,例如this one

答案 4 :(得分:1)

Windows上的Visual Studio或Unix上的Data Display Debugger只要您使用调试符号进行编译,就可以完成相当不错的工作,并且可以在不了解汇编程序的情况下逐步执行C ++代码。熟悉手头的机器架构,对asm语法的基本理解,以及C ++构造如何映射到那将使您更进一步。

答案 5 :(得分:0)

您无需了解汇编程序即可进行有效的调试。您真正需要担心汇编代码的唯一时间是您遇到优化问题,但即便如此,您最好还是处理高级代码而不是尝试编写更高效的汇编程序例程。

答案 6 :(得分:0)

你的平台是什么? VS2010将大大改善调试体验。

答案 7 :(得分:0)

C ++不要求应用程序存储元数据以帮助调试。如果找不到这样的元数据,那么调试器没有多少工作量。它所看到的只是正在执行的机器代码,所以它必须回退给你展示普通的汇编代码。

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

您没有指定您使用的编译器或调试器,因此我无法告诉您如何在特定情况下使用它。

在GCC上,你必须用-g进行编译,以便为GDB生成调试信息。

在Visual Studio中它应该适用于大多数情况下(虽然我相信如果你启动一个“空C ++项目”,你必须自己在项目属性中启用调试信息)