有没有什么捷径可以不学习汇编语言就能理解调试器?
PS:我看到了一本将近1000页的汇编书,我没有勇气去读它。请帮帮我。
编辑:**** 我正在使用codeBlocks ide。但我觉得这个问题即使对于MSVC++也是成立的。
虽然在调试过程中一些汇编语言的知识可能非常有用,但对于您来说更有价值的可能是确保正确获取调试符号(debugging symbols)。
如果使用的是 gcc 编译器,请使用 -g
标志。 如果使用的是 Visual Studio 编译器,则在项目设置中启用调试符号生成(即使是发布构建也要启用)。 如果您使用其他编译器,请查阅其相关文档。
最后,但同样重要的是,如果您使用的是 Windows 操作系统,请考虑为其二进制文件下载调试符号,因为这可能会使您的工作变得轻松许多。 在此处找到链接: Microsoft 网站
听起来像是控制权跳转到了一个没有源代码或没有使用调试信息构建的库中。
熟悉机器架构和汇编语言可能有所帮助,但并不是使用调试器的必需条件。
是的。为了最优地进行调试,您必须理解汇编语言,它只是处理器所使用的语言。
这并不可怕。编程语言没有比汇编更简单的了。
在Windows上使用Visual Studio或在Unix上使用Data Display Debugger,只要您编译时使用调试符号,并允许您在不了解汇编语言的情况下逐步执行C++代码,就可以做出非常好的工作。熟悉所用机器架构、基本理解汇编语法以及C++结构如何映射到其中将使您更进一步。
你不需要理解汇编语言就能进行有效的调试。唯一需要关注汇编代码的时候是当你遇到优化问题时,但即使在这种情况下,你最好处理高级别的代码而不是尝试编写更有效的汇编程序。
你使用的平台是什么?VS2010将大大提高调试体验。
C++不需要应用程序存储元数据来帮助调试。如果找不到这样的元数据,那么调试器就没有太多可用的信息。它所看到的只是正在执行的机器代码,因此必须退回到显示纯汇编代码。
然而,编译器通常能够构建调试信息供调试器使用。这些基本上告诉编译器源代码的样子(或者在哪里找到源文件),以及哪些指令与哪些源代码行匹配,使您能够调试实际编写的C++代码。
您没有指定使用哪个编译器或调试器,因此我无法告诉您如何在您的特定情况下使用它。
在GCC上,据我所知,您必须使用-g
进行编译,以便生成GDB可以使用的调试信息。
在Visual Studio中,大多数情况下应该可以正常工作(尽管我相信如果您启动一个“空的C++项目”,则必须自己启用调试信息,在项目属性中)。