草庐IT

MinGW-gdb

全部标签

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++ - 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

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

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

c++ - 使用 MinGW 和 Eclipse 编译 Win32 GUI 应用程序(没有控制台)

我正在使用带有MinGW作为编译器的eclipseIDE来制作Win32GUI应用程序。我想去掉控制台,但是用-mwindows选项编译程序没有效果,控制台还在。使用-Wl,--subsystem,windows标志也不会产生任何效果。我做错了什么? 最佳答案 对于Windows上的gcc,构建非控制台Windows应用程序应考虑两件事:编译器选项-mwindows有WinMain()但是,可以手动将-Wl,-subsystem,windows指定给链接器,并将gdi32和comdlg32包含到build。这正是-mwindows自

c++ - 使用 MinGW 和 Eclipse 编译 Win32 GUI 应用程序(没有控制台)

我正在使用带有MinGW作为编译器的eclipseIDE来制作Win32GUI应用程序。我想去掉控制台,但是用-mwindows选项编译程序没有效果,控制台还在。使用-Wl,--subsystem,windows标志也不会产生任何效果。我做错了什么? 最佳答案 对于Windows上的gcc,构建非控制台Windows应用程序应考虑两件事:编译器选项-mwindows有WinMain()但是,可以手动将-Wl,-subsystem,windows指定给链接器,并将gdi32和comdlg32包含到build。这正是-mwindows自

c++ - wWinmain、Unicode 和 Mingw

我正在学习WindowsAPI,并使用mingw作为我的编译器,使用Code::Blocks作为我的IDE。我在使用wWinMain函数时遇到了问题。我使用了位于linktext的程序.它在VSC++2008express上编译得很好,但是在使用mingw时我得到“未定义对WinMain@16的引用”错误。我已经弄清楚问题是什么(我认为)。通过仅将wWinMain替换为Winmain并将字符串指针PWSTR替换为LPSTR,它可以完美地编译。我的问题是,我该如何解决这个问题,如果没有,那么使用Unicode是不是很重要。谢谢。 最佳答案