草庐IT

c++ - GDB-Python 脚本 : any samples iterating through C/C++ struct fields

新的GDB-PythonscriptingAPI看起来很强大,应该很有用。然而,编写一个有用的脚本来遍历C或C++结构中的字段并非易事。有谁知道一些确实可以做到这一点的固体sample?提前致谢。更新最终示例:替换早期示例中的_print_fields()。ifl.type.code==gdb.TYPE_CODE_STRUCT:print"Foundastruct%s"%n#self._print_fields(n,t)self._print_deep_items(n,t,l)else:print"Foundnostruct"def_print_deep_items(self,n_,t

c++ - 如何在 gdb 堆栈跟踪充满 '??' 时调试段错误?

我的可执行文件包含符号表。但似乎堆栈跟踪被覆盖了。请问如何从该核心中获取更多信息?例如,有没有办法检查堆?查看填充堆的对象实例以获得一些线索。无论如何,任何想法都值得赞赏。 最佳答案 我以C++程序员为生,遇到这个问题的次数比我愿意承认的要多。您的应用程序正在破坏堆栈的巨大部分。很有可能破坏堆栈的函数在返回时也会崩溃。之所以会这样,是因为返回地址被覆盖了,这也是GDB的堆栈跟踪乱七八糟的原因。这是我调试此问题的方式:1)单步执行应用程序,直到它崩溃。(寻找一个在返回时崩溃的函数)。2)一旦你确定了函数,在函数的VERYFIRSTLI

c++ - 如何在 gdb 堆栈跟踪充满 '??' 时调试段错误?

我的可执行文件包含符号表。但似乎堆栈跟踪被覆盖了。请问如何从该核心中获取更多信息?例如,有没有办法检查堆?查看填充堆的对象实例以获得一些线索。无论如何,任何想法都值得赞赏。 最佳答案 我以C++程序员为生,遇到这个问题的次数比我愿意承认的要多。您的应用程序正在破坏堆栈的巨大部分。很有可能破坏堆栈的函数在返回时也会崩溃。之所以会这样,是因为返回地址被覆盖了,这也是GDB的堆栈跟踪乱七八糟的原因。这是我调试此问题的方式:1)单步执行应用程序,直到它崩溃。(寻找一个在返回时崩溃的函数)。2)一旦你确定了函数,在函数的VERYFIRSTLI

c++ - 如何使用 GDB 7.x 查看 STL 容器的内容

我一直在使用宏解决方案,正如它所概述的here.但是,提到了如何在没有宏的情况下查看它们。我指的是GDB版本7及更高版本。有人能说明一下吗?谢谢 最佳答案 从SVN获取python查看器svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python将以下内容添加到您的~/.gdbinitpythonimportsyssys.path.insert(0,'/path/to/pretty-printers/dir')fromlibstdcxx.v6.printersimportregister_l

c++ - 如何使用 GDB 7.x 查看 STL 容器的内容

我一直在使用宏解决方案,正如它所概述的here.但是,提到了如何在没有宏的情况下查看它们。我指的是GDB版本7及更高版本。有人能说明一下吗?谢谢 最佳答案 从SVN获取python查看器svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python将以下内容添加到您的~/.gdbinitpythonimportsyssys.path.insert(0,'/path/to/pretty-printers/dir')fromlibstdcxx.v6.printersimportregister_l

c++ - 使用 android NDK 获取硬件浮点

我已经开始使用androidNDK。我刚刚学到的一件事是关于创建一个application.mk文件来指定armv7abi。我正在使用以下参数构建san-angeles示例。APP_MODULES:=sanangelesAPP_PROJECT_PATH:=$(callmy-dir)/../APP_OPTIM:=releaseAPP_ABI:=armeabi-v7a但是,这似乎以与以前完全相同的速度运行(即非常糟糕)。我只是GL限制而不是CPU限制还是这里有问题?我注意到编译时会发出以下命令行选项:-march=armv7-a-mfloat-abi=softfp-mfpu=vfp-mth

c++ - 使用 android NDK 获取硬件浮点

我已经开始使用androidNDK。我刚刚学到的一件事是关于创建一个application.mk文件来指定armv7abi。我正在使用以下参数构建san-angeles示例。APP_MODULES:=sanangelesAPP_PROJECT_PATH:=$(callmy-dir)/../APP_OPTIM:=releaseAPP_ABI:=armeabi-v7a但是,这似乎以与以前完全相同的速度运行(即非常糟糕)。我只是GL限制而不是CPU限制还是这里有问题?我注意到编译时会发出以下命令行选项:-march=armv7-a-mfloat-abi=softfp-mfpu=vfp-mth

c++ - gdb 将内存地址解释为对象

我正在根据可用的核心转储调查一次崩溃。崩溃的应用程序是一个C++程序,使用gcc构建并在RH5上运行。回溯似乎在#1帧之前有效。那里试图打印我得到的对象,由于我从#2帧中获得了对象的地址,因此我可以以某种方式“转储”分配对象的内存并仍然收集一些信息,这是一个有效的假设。此外,与其尝试猜测对象是如何对齐的,我是否可以强制gdb像打印对象一样打印地址,即使它检测到一些错误。我的想法是该对象可能已经被删除,但也许内存仍然存在,我可以打印一些成员变量。请评论这是否可能,如果是,应该如何在gdb术语中完成。10倍。 最佳答案 好吧,如果你有地

c++ - gdb 将内存地址解释为对象

我正在根据可用的核心转储调查一次崩溃。崩溃的应用程序是一个C++程序,使用gcc构建并在RH5上运行。回溯似乎在#1帧之前有效。那里试图打印我得到的对象,由于我从#2帧中获得了对象的地址,因此我可以以某种方式“转储”分配对象的内存并仍然收集一些信息,这是一个有效的假设。此外,与其尝试猜测对象是如何对齐的,我是否可以强制gdb像打印对象一样打印地址,即使它检测到一些错误。我的想法是该对象可能已经被删除,但也许内存仍然存在,我可以打印一些成员变量。请评论这是否可能,如果是,应该如何在gdb术语中完成。10倍。 最佳答案 好吧,如果你有地

c++ - 是否可以以编程方式设置 gdb 观察点?

我想在我的C++程序中临时设置一个观察点(硬件写入中断)以查找内存损坏。我已经看到了通过gdb手动执行此操作的所有方法,但我想通过代码中的某些方法实际设置观察点,这样我就不必闯入gdb,找出地址,设置观察点,然后继续。类似:#defineSET_WATCHPOINT(addr)asm("setbreakonhardwarewrite%addr") 最佳答案 从子进程设置硬件观察点。#include#include#include#include#include#include#include#include#include#incl