如何为调试目的学习 C++

Posted

技术标签:

【中文标题】如何为调试目的学习 C++【英文标题】:How to learn C++ for the purposes of debugging 【发布时间】:2009-10-28 11:11:24 【问题描述】:

一些背景知识:我的工作涉及维护一个大型多线程多进程 C++/C# 应用程序,因此我经常负责了解访问冲突、内存泄漏、堆损坏问题等。

我很喜欢这个,而且我对各种低级概念已经有了很好的理解,但问题是我不会用 C++ 编程,为了维护的目的放在一边我真的不打算。

我的意思是,如果我需要开发某些东西,那么在我工作的公司中,最好的选择是 C#(更多的开发人员,C# 中的其他应用程序也意味着更好的互操作性),所以并不是我不这样做'我用 C++ 编程,只是每当我用 C++ 编程时,都会纯粹为了学习 C++,而 所以我想充分利用它 .

我的观点是“自学 C++”的书和类似的书不太适合,因为它们过于关注完成事情——通常有很多做事的方法,所以他们倾向于选择一种方法,所以当我看到了一些以不同方式做事的代码(例如,一本书教了 MFC,然后我得到了一些 ATL 代码,而这本书甚至没有教我 ATL 和 MFC 是什么,更不用说如何认识到我看到的是不同的!)

我真的在寻找自学 C++,重点是理解其他人的代码

【问题讨论】:

【参考方案1】:

恕我直言,C++ 尤其是一种您无法通过阅读“自学”书籍来学习的语言,您确实需要有多个资源,其中一个实际上是查看其他人的代码。

我建议阅读Scott Meyers 的 Effective C++ 和 More Effective C++ 以了解使用 C++ 编程时的一些陷阱,这是一种学习的好方法,尤其是当您查看人们的代码时。另一个无法提供帮助的网站是gotw,那里也有一些很好的信息。

【讨论】:

您可能会将 Herb Sutter 的 C++ 编码标准混在一起,尽管 Meyers 的一些建议可能是多余的。这个想法是专门针对危险行为以及如何正确处理。【参考方案2】:

由于您永远不会从头开始创建 C++ 程序,因此我建议您缩小视野,只关注您将支持的应用程序,专注于您不完全理解的事情并一一解决。

我发现http://www.parashift.com/c++-faq-lite/ 是一个很好的 C++ 基础资源。在处理 MFC 或 ATL 等特定技术时,请事先研究哪些书最适合您。我最喜欢的方法:一杯浓咖啡、一把舒适的椅子和一堆巴诺书店的候选书籍来复习。专注于在线搜索也足够了。

知识和掌握没有捷径,但通过限制你的注意力,你可以节省一些浪费的精力。一般来说,技术越复杂——或者设计越基本——你需要知道的修复它就越多。这是生活中的事实!

【讨论】:

【参考方案3】:

C++ FAQ 是一个很好的信息来源。

【讨论】:

【参考方案4】:

尽管有其他人的回答,但我认为您的问题主要不在于语言。当然,您可以查看标准或 Stroustrup,但这些只会教您语言结构。

我想,您学习的大部分内容将是特定于 windows 的,以及您正在使用的任何平台。

请阅读 stroustrup 和其他语言指南,但要准备好深入研究您正在使用的库和系统的文档。

【讨论】:

【参考方案5】:

听起来您确实需要一份 C++ 标准的副本。 (ISO/IEC 14882 - 以草稿形式在线免费提供。最终版本只需几美元)

当然,Stroustrup's book 也是一个不错的选择。但总的来说,应关注描述语言的材料,而不是如您所说的“如何完成工作”。

【讨论】:

【参考方案6】:

如果您必须在很大程度上维护使用 MFC 和/或 ATL 的 C++ 代码,那么了解其工作原理以便能够正确维护代码的最佳方法是编写使用 MFC 的小型应用程序和/或 ATL,以便您了解代码运行时正在发生的 hwta。阅读 Stroustrup 的书对理解 MFC 和/或 ATL 没有任何帮助。您可能应该关注的另一件事是 COM 的工作原理,因为 ATL 基本上是一个模板、宏等框架,它使 COM 的使用更加容易。

希望对您有所帮助。

【讨论】:

以上是关于如何为调试目的学习 C++的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Visual Studio 2012 调试器编写自定义本机可视化工具 DLL?

如何为 Windows 编译 lsqlite3?

cpp学习使用VS进行简单调试

如何为 GradientDescentOptimizer 设置自适应学习率?

如何为scikit学习随机森林模型设置阈值

深度学习 - 如何为大型分类集准备训练数据?