- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
首先让我说,我已经在这里搜索了其他非常密切相关的问题,但它们并没有帮助解决我的问题。
设置:
svn co...
)我刚开始使用 Eclipse/CDT,但熟悉 GDB。当我尝试调试使用 STL 的应用程序时,在第一次出现 STL 对象时,我收到以下错误。在有很多很多 STL 对象的程序中,我会遇到很多错误,以至于无法进行单步执行。我这里有一个用于说明目的的小示例程序。
这是我的示例程序:
#include <iostream>
using namespace std;
int main() {
string sComplex;
sComplex = "!!!Hello World!!!";
cout << sComplex << endl; // prints !!!Hello World!!!
//cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
cout << "This is a new string that writes out a numeric..." << endl;
int i = 1000;
cout << "Value for integer 'i' is : '" << i << "'." << endl;
cout << " In HEX: '";
cout << std::hex << std::showbase << i;
cout << "'." <<endl;
return 0;
}
以下是它一到达第一行(STL 字符串实例化)就打印出来的错误:
Traceback (most recent call last): File "/usr/lib64/../share/gdb/python/libstdcxx/v6/printers.py", line 558, in to_string return self.val['_M_dataplus']['_M_p'].lazy_string (length = len) RuntimeError: Cannot access memory at address 0xffffffffffffffe8
Traceback (most recent call last): File "/usr/lib64/../share/gdb/python/libstdcxx/v6/printers.py", line 558, in to_string return self.val['_M_dataplus']['_M_p'].lazy_string (length = len) RuntimeError: Cannot access memory at address 0xffffffffffffffe8
Traceback (most recent call last): File "/usr/lib64/../share/gdb/python/libstdcxx/v6/printers.py", line 558, in to_string return self.val['_M_dataplus']['_M_p'].lazy_string (length = len) RuntimeError: Cannot access memory at address 0xffffffffffffffe8
首先,请注意这个对象有 3 个独立的错误。我已验证是否安装了 python pretty-print 模块,并且我尝试了限制 to_string 中的长度的建议,但无济于事。如果我越过字符串实例化,一切正常,我可以看到变量的简单字符串值。鼠标悬停看起来也不错。当我直接在命令行上使用 gdb 调试同一个应用程序时,我没有看到任何此类错误和变量值打印漂亮。
(gdb) p sComplex
$1 = "!!!Hello World!!!"
(gdb) p sComplex.c_str()
$2 = 0x602028 "!!!Hello World!!!"
我已经对我的 .gdbinit 文件和 Eclipse 的 Window->Preferences->C/C++->Debug->GDB 设置尝试了各种建议,甚至禁用 pretty-print ,但它仍然发生。我不知道接下来还能尝试什么。
最佳答案
我最终决定重新审视这个问题,并最终通过类似于 this one 的解决方案解决了它。 ,并通过额外编辑我的自定义 printers.py。希望这对遇到此问题的其他人有所帮助。
svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
)到$HOME/gdb/gdb_printers/
。
/usr/share/gdb/
)复制它。完成后你应该有一个像这样的目录结构:
这个结构必须是精确的,否则它不会使用/v6/中的 printers.py。
编辑 printers.py,特别是 StdStringPrinter::to_string
如下(添加 try/except/else):
def to_string(self):
# Make sure &string works, too.
type = self.val.type
if type.code == gdb.TYPE_CODE_REF:
type = type.target ()
# Calculate the length of the string so that to_string returns
# the string according to length, not according to first null
# encountered.
# I wrapped this section in a try/except/else block so that uninitialized
# strings don't cause massive RuntimeError exception reporting during debugging
# with or without pretty printers enabled. -jkw
try:
ptr = self.val ['_M_dataplus']['_M_p']
realtype = type.unqualified ().strip_typedefs ()
reptype = gdb.lookup_type (str (realtype) + '::_Rep').pointer ()
header = ptr.cast(reptype) - 1
len = header.dereference ()['_M_length']
except RuntimeError:
#print 'Caught exception'
return ''
else:
return self.val['_M_dataplus']['_M_p'].lazy_string (length = len)
创建/编辑$HOME/gdb/.gdbinit
文件并将以下内容放入其中。 请注意,该路径必须与上图/ TreeView 中“python”目录的路径相匹配。
python
import sys
sys.path.insert(0, '/home/(user_id)/gdb/gdb_printers/python')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end
在 Eclipse 中,在 Window -> preferences -> C/C++ -> Debug -> GDB
下,将路径设置为 gdb
和你的 .gdbinit
文件。您可能还需要在您想要使用 printers.py 的任何现有调试配置上进行设置。
GDB debugger: /usr/bin/gdb
GDB command file: /home/(user_id)/gdb/.gdbinit
从那里开始,调试功能就像您认为的那样。
关于c++ - Eclipse/CDT pretty-print 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23837549/
我的问题:在没有多余括号的情况下漂亮地打印表达式的最干净的方法是什么? 我有以下 lambda 表达式的表示: Term ::= Fun(String x, Term t) | App(
我正在创建一些脚本和程序来使用获取提交信息 git log --pretty= -1 我想知道此命令的输出是否适合由程序(管道)解析或仅用于呈现给人类(瓷器)。例如,在某些项目中,我正在获取提交 S
当我构建应用程序时,我使用的是 adonis js 项目版本 5 和 Node js 版本 14 以及 docker 版本 20 一切正常但是当我创建 docker 图像并运行容器 docker 时我
使用 mongo v2.4.5 shell,db.col.find().pretty() 在 osx 控制台或 linux ubuntu 12.04 bash 上对我来说打印效果不佳。 使用和不使用
我想将一些printf/sprintf/fprintf语句重构为ostream/sstream/fstream 语句。有问题的代码漂亮地打印了一系列整数和 float ,使用空格填充和固定的小数点数。
我理解大多数具有动态 Web 内容的编程语言中 \t 和 \n 的概念。与大多数人一样,我使用它们的目的是转换所有花哨的 HTML,使其在查看源代码时可读且“漂亮”。目前,我正在制作一个使用 PHP
System.Type 类的名称属性在泛型类型的情况下返回一个奇怪的结果。有没有办法让类型名称的格式更接近我指定的方式?示例:typeof(List).OriginalName == "List" 最
我正在尝试在 Haskell 中漂亮地打印一棵二叉树,这样如果您将头向左转,它应该看起来像一棵树。树中的每一层都应比上一层缩进 2 个空格。 这是预期的输出: -- 18 --
如何在 gdb 中禁用特定的 pretty-print ? 例如,禁用 C++11 std::unique_ptr 打印机。 gdb 帮助或文档未提供真实世界或工作示例。 最佳答案 这对我有用: (g
编辑 我不只是问“缩进”每一行代码,还问“ pretty-print ”和/或更广泛的“缩进”定义,其中行将根据它们包含的内容进行分组/拆分。 这是一个函数(我编写它是为了解决欧拉问题,但这不是重点:
有没有办法像 SBCL 一样以清晰的方式打印评估嵌套语法引号的结果?这在编写宏时调试嵌套语法引号时非常有用。例如,在 Clojure 1.8 中, (let [x '(1 2)] ``(~~@x))
R有多个软件包,可帮助从统计模型输出中打印“漂亮”表(LaTeX/HTML/TEXT),并轻松比较替代模型规范的结果。 其中一些软件包是apsrtable,xtable,memisc,texreg,o
python Data Classes实例还包括一个字符串表示方法,但是当类具有多个字段和/或更长的字段值时,它的结果对于 pretty-print 目的来说并不足够。 基本上,我正在寻找一种方法来自
我需要进行这样的舍入并将其转换为字符: as.character(round(5.9999,2)) 我希望它成为6.00,但它只是给我6 无论如何,我可以让它显示6.00吗? 最佳答案 尝试以下任一方
当我对源使用各种选项进行缩进时,它会执行我想要的操作,但也会使* s在指针类型中的位置困惑: -int send_pkt(tpkt_t* pkt, void* opt_data); -void
我试过 pprint来自 pprint ,但它的输出只有一行,没有多行输出,也没有缩进。 最佳答案 我使用namedtuple的 _asdict 方法。 但是,它返回 OrderedDict其中ppr
我正在为 ocaml 寻找代码格式化程序或 pretty-print 。类似于 gofmt 的 go 编程语言。它最好保留注释。 我正在更正提交内容,并且某些代码的格式使其难以阅读。 最佳答案 如果你
假设我有一个如下定义的二叉树数据结构 type 'a tree = | Node of 'a tree * 'a * 'a tree | Nil 我有一个树的实例,如下所示: let
我正在使用 Pretty Dropdowns ( https://www.npmjs.com/package/pretty-dropdowns ) 作为我的下拉菜单,并且我有一个允许用户将行附加到表单
我正在使用 pretty-print Data.Text.Prettyprint.Doc 。现在我想以不同的方式设计我的输出,并认为语义注释的想法非常适合这里。考虑以下示例 {-# LANGUAGE
我是一名优秀的程序员,十分优秀!