我知道E&C是一个有争议的主题,有人说它会鼓励错误的调试方法,但是-我认为我们可以同意在很多情况下它明显有用-尝试一些常量的不同值,即时重新设计GUI参数以找到好看的外观......您可以命名它。我的问题是:我们是否会在GDB上进行E&C?我知道这是一个特定于平台的功能,需要与编译器、调试器和操作系统进行认真的合作(MSVC很容易做到这一点,因为编译器和调试器总是在一个包中),但是......它仍然应该是可行的。我什至听说过Apple在他们的GCC版本中实现了它[需要引用]。我会说这确实是可行的。了解所有关于MSVC的E&C的炒作(我的经验表明这是MSVC用户在被问及“为什么不切换到E
我知道E&C是一个有争议的主题,有人说它会鼓励错误的调试方法,但是-我认为我们可以同意在很多情况下它明显有用-尝试一些常量的不同值,即时重新设计GUI参数以找到好看的外观......您可以命名它。我的问题是:我们是否会在GDB上进行E&C?我知道这是一个特定于平台的功能,需要与编译器、调试器和操作系统进行认真的合作(MSVC很容易做到这一点,因为编译器和调试器总是在一个包中),但是......它仍然应该是可行的。我什至听说过Apple在他们的GCC版本中实现了它[需要引用]。我会说这确实是可行的。了解所有关于MSVC的E&C的炒作(我的经验表明这是MSVC用户在被问及“为什么不切换到E
我试图在我的程序中捕获失败的断言。我正在使用一个直接调用assert()的库,而不是自定义函数或宏,我目前正试图在这个库中跟踪几个与移植相关的错误。所涉及的所有内容都已使用g++中的调试符号编译。我发现的最佳解决方案是在断言的文件:行处中断,并使用断言表达式的条件。这允许在断言失败之前停止断言,但这是一个可怕的解决方案。它需要对每个可能失败的断言进行特殊设置,在我的IDE中无法使用,而且总体上需要付出太多努力。如何使用gdb和gcc打破任何失败的断言,以允许检查断言调用范围内的调用堆栈和变量?如果解决方案允许我放弃断言的失败并继续运行,那就更好了。 最佳答案
我试图在我的程序中捕获失败的断言。我正在使用一个直接调用assert()的库,而不是自定义函数或宏,我目前正试图在这个库中跟踪几个与移植相关的错误。所涉及的所有内容都已使用g++中的调试符号编译。我发现的最佳解决方案是在断言的文件:行处中断,并使用断言表达式的条件。这允许在断言失败之前停止断言,但这是一个可怕的解决方案。它需要对每个可能失败的断言进行特殊设置,在我的IDE中无法使用,而且总体上需要付出太多努力。如何使用gdb和gcc打破任何失败的断言,以允许检查断言调用范围内的调用堆栈和变量?如果解决方案允许我放弃断言的失败并继续运行,那就更好了。 最佳答案
假设我有一个C++数组:double*velocity=newdouble[100];使用GDB命令行,我可以通过以下命令查看这个数组:>print*velocity@100它会打印出数组中所有double值的格式正确的列表。但是,当使用Xcode调试器时,它最多会将其视为指向单个double值的指针,并在变量列表中显示velocity[0]。这使它成为调试包含大型动态分配数组的程序的真正PITA。必须有某种方法来告诉Xcode“这是一个指向长度为100的数组的指针”,并让它这样显示。有人知道是什么吗? 最佳答案 我认为我的回答会是
假设我有一个C++数组:double*velocity=newdouble[100];使用GDB命令行,我可以通过以下命令查看这个数组:>print*velocity@100它会打印出数组中所有double值的格式正确的列表。但是,当使用Xcode调试器时,它最多会将其视为指向单个double值的指针,并在变量列表中显示velocity[0]。这使它成为调试包含大型动态分配数组的程序的真正PITA。必须有某种方法来告诉Xcode“这是一个指向长度为100的数组的指针”,并让它这样显示。有人知道是什么吗? 最佳答案 我认为我的回答会是
我在OSX上的Eclipse(Helios的最新RC,使用最新的CDT更新)在OSX上调试C++程序时遇到问题。程序非常简单(基本上是NeHe的OpenGL教程的第2课),由一个cpp文件组成,使用OpenGL和Cocoa框架,并与libSDL.a和libSDLmain.a链接。项目的结构非常简单:源文件位于项目的子目录src/中,可执行文件构建到项目的根目录中。问题是,每当我尝试添加断点并对其进行调试时,断点似乎被完美命中,但没有显示任何源-相反,我只是在代码窗口中收到“没有可用于main()的源”错误。编译器标志的优化设置为无,编译器和链接器都设置了调试符号标志(-g)。Eclip
我在OSX上的Eclipse(Helios的最新RC,使用最新的CDT更新)在OSX上调试C++程序时遇到问题。程序非常简单(基本上是NeHe的OpenGL教程的第2课),由一个cpp文件组成,使用OpenGL和Cocoa框架,并与libSDL.a和libSDLmain.a链接。项目的结构非常简单:源文件位于项目的子目录src/中,可执行文件构建到项目的根目录中。问题是,每当我尝试添加断点并对其进行调试时,断点似乎被完美命中,但没有显示任何源-相反,我只是在代码窗口中收到“没有可用于main()的源”错误。编译器标志的优化设置为无,编译器和链接器都设置了调试符号标志(-g)。Eclip
在我的应用程序中,我处理SIGSEG以生成回溯并调用abort()以生成核心转储。如果我现在对内核运行gdb-post-mortem分析,导致SEGFAULT的线程不再可见。有什么办法可以让我看到SEGFAULT的原因吗? 最佳答案 您可以使用命令threadapplyallbt或threadapplyallbtfull来获取所有线程的回溯。可能有用。顺便说一句,如果你摆脱你的处理程序,你的操作系统会创建一个核心文件吗? 关于c++-如何在事后gdbsession中查找导致SEGFAUL
在我的应用程序中,我处理SIGSEG以生成回溯并调用abort()以生成核心转储。如果我现在对内核运行gdb-post-mortem分析,导致SEGFAULT的线程不再可见。有什么办法可以让我看到SEGFAULT的原因吗? 最佳答案 您可以使用命令threadapplyallbt或threadapplyallbtfull来获取所有线程的回溯。可能有用。顺便说一句,如果你摆脱你的处理程序,你的操作系统会创建一个核心文件吗? 关于c++-如何在事后gdbsession中查找导致SEGFAUL