【发布时间】:2016-02-29 19:13:54
【问题描述】:
考虑一个产生一些分段错误并中止的 c++ 程序。
在使用 gdb 进行常规调试时,我可以执行以下操作并查看结果
(gdb) r
(gdb) p str_var.size()
其中 str_var 在文件中被定义为 std::string。
但是,我在使用核心转储进行调试时遇到了一些问题。在我通过
加载gdb中的核心转储之后gdb EXECUTABLE core.pid
并在 gdb 终端中运行以下命令
(gdb) p str_var.size()
gdb 说“如果没有要调试的进程,您将无法做到这一点。”
我只能执行 bt(查看堆栈跟踪)或直接打印 std::string 变量之类的操作,但找不到一种简单的方法来检查某些信息,例如打印 std::string 的大小。调试核心转储时,调试能力是否总是受到限制?特别是对于这里的问题,有没有办法在核心转储调试中知道 std::string 的大小?
【问题讨论】:
-
不,你需要一个进程来运行函数。幸运的是,gdb 为您提供了 Python 漂亮的打印机,可以很好地格式化标准字符串和容器。