- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用
在我的“C++ 简单测试”中,每当我检查一个 shared_ptr 变量时,我看到的所有值都是:
std::shared_ptr (count 1, weak 0) 0x64d3a0
或类似的。无法深入了解它实际指向的值。即使变量窗口中的 TreeView 显示了其中一个扩展器图标,当我单击它时它也会消失。当我尝试取消引用它或在“表达式”窗口中调用它的 get()
函数时,我收到一条错误消息:
Could not find operator*.
和
Cannot evaluate function -- may be inlined
分别。
如果我在实际程序中创建对值的引用,它不仅允许我向下钻取引用,而且还可以向下钻取 shared_ptr(这对我来说似乎很可疑)。我尝试了 -g3
和 -ggdb
但没有任何区别。
是否有标准库的调试版本(libcxx 是默认的?),或者某个地方的设置可能会改善这种情况?或者可能是一种在变量窗口中列出私有(private)成员/原始 View 的方法,这样我就可以自己解除对底层指针的引用?
最佳答案
gdb 的一个缺陷是 pretty-print 代码仅用于打印,不能用于更深入的挖掘。此缺陷还会影响“varobj”功能,这是大多数 GUI 在与 gdb 就值显示进行通信时使用的功能。
有一些可能性可以让它变得更好。
首先,介绍一下背景。您不能调用 operator*
或 get
的原因是 gcc 通常不会发出始终内联的函数的外联拷贝。这是一个节省空间的优化。 (您可以要求发生这种情况,但这种情况并不常见。)
因此,解决此问题的一种方法是使用新的 gdb xmethod
代码。您可以在 gdb 中编写一些 Python 代码来实现 get
之类的操作,这样 gdb 表达式将按预期工作,即使编译器不合作也是如此。这很方便! libstdc++ 附带其中一些,但我不知 Prop 体是什么;你将不得不去挖掘。
我经常使用两种低技术含量的方法。
评论中提到 -- 复制并粘贴指针值,转换为正确的类型。这工作可靠,但正如您所注意到的那样很痛苦。 Gdb 可能应该对这个习惯用法有一些“varobj”支持,这样 IDE 就可以做正确的事情而不会跳过箍。我相信有一个关于此的 gdb 错误。
绕过 pretty-print ,直接深入研究对象表示。这有时会令人不快——特别是在 libstdc++ 中,有时对象表示确实不明显——但对于像智能指针这样的东西,它应该不会太糟糕。方法就是 print/r
,然后检查您看到的内容。 IDE 可以而且应该提供一种绕过 pretty-print 的方法,“varobj”API 公开了此功能。我不知道 Netbeans 是否支持。
关于c++ - 如何深入研究 shared_ptr [Netbeans、clang++、gdb],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30821402/
我正在从我的服务器取回以下数据集 {"success":"y","carrier":"Verizon Wireless","isMobile":"true"} 当我尝试深入了解我的 ajax 函数的
我无法引用处于传递给子组件状态的对象和数组的元素。 当我无法在某些子组件中引用它们时,我无法清楚地识别这些情况之间的差异。 我想念什么? 组件的示例属性在组件下给出。发表了评论。例如,我无法引用 cu
我是一名使用 ASP.NET 的网络开发新手。我还没有真正需要 javascript 来做任何事情,因为到目前为止我构建的应用程序都是相当简单的数据挖掘应用程序,我的观众并不在寻找花里胡哨的东西。但是
我在尝试进一步深入了解 json 数据以提取特定的键/值对时遇到问题。我只是想拉出经度/纬度,我认为它是位置的子数组,它是几何的子数组。我的 JSON: results": [ {
Ignoring Block: Either I'm wrong here, or the whiskey is starting to work. (I don't want to rule out
我目前正在使用 C++ 开发一个无线网络应用程序,并且它已经到了我想要在一个进程下多线程处理软件片段的地步,而不是将它们都放在单独的进程中。从理论上讲,我了解多线程,但实际上我还没有深入研究。 每个程
我是一名优秀的程序员,十分优秀!