有没有一种方法可以让我的代码插入断点或监视gdb将遵守的内存位置?(并且可能在未附加gdb时无效。)我知道如何在gdbsession中执行诸如gdb命令之类的事情,但是对于某些类型的调试,如果您明白我的意思的话,“以编程方式”执行它会非常方便——例如,仅错误发生在特定情况下,不是调用崩溃例程的前11,024次,也不是内存位置被修改的前43,028,503次,因此在例程上设置简单的断点或在变量上设置观察点是没有帮助的-这都是误报。我主要关心Linux,但很好奇是否存在适用于OSX(或Windows,尽管gdb显然不存在)的类似解决方案。 最佳答案
我正在尝试在Ubuntu14.0.4的Eclipse中启用pretty-print。我已按照以下步骤设置pretty-print:http://wiki.eclipse.org/CDT/User/FAQ我有一个SVN目录,使用建议的代码和正确的路径创建了一个.gdbinit文件,并将我的Eclipse调试指向该文件。我已经修复了printers.py文件中的错误。当我选择这个选项运行调试时,我得到ErrorinfinallaunchsequenceFailedtoexecuteMIcommand:source/home/dreitz/python/init.gdbinitErrorme
我有一个在Ubuntux86上用gcc编译的C程序。这是我从main调用的函数voidaddme(){longa=5;charc='3';longarray[3];array[0]=2;array[1]=4;array[2]=8;}如果我在最后一行中断,然后调试/检查这就是我得到的(gdb)print&a$5=(long*)0xbffff04c(gdb)print&c$6=0xbffff04b"3\005"(gdb)print&array$7=(long(*)[3])0xbffff03c(gdb)x0xbffff03c0xbffff03c:0x00000002(gdb)x0xbffff
在C++中退出函数时出现段错误,您能想到哪些可能的原因?我的意思是,我在C++程序中有一个可重现的段错误,当我调查使用GDB时说ProgramreceivedsignalSIGSEGV,Segmentationfault.FooBar(bla=...)atfoo.cpp:5959}指示的行包含我的函数的右括号。 最佳答案 这可能有很多原因。在Valgrind下运行程序,它很可能会告诉您确切的原因,或者至少会帮助调查和缩小问题范围。 关于c++-函数退出时出现段错误的可能原因,我们在Sta
对于这个函数:voidfoo_ref(constint&i){cout在gdb中调用失败:(gdb)callfoo_ref(5)Attempttotakeaddressofvaluenotlocatedinmemory.当然,在这个简单的例子中,不需要使用引用作为参数。如果我使用普通的“int”,那没问题。实际上真正的例子是一个模板函数,像这样:templatevoidt_foo_ref(constT&i){cout当“T”为“int”时,出现上述问题。这是gdb中的错误吗?或者我可以在gdb中调用这样的函数吗? 最佳答案 这是可能
前言:上一篇文章中我们讲解了Linux下的gcc与g++的使用,今天我们将进一步的学习gdb与makefile来帮我们更好的理解与使用基础开发工具。💖博主CSDN主页:卫卫卫的个人主页💞👉专栏分类:Linux的深度刨析👈💯代码仓库:卫卫周大胖的学习日记💫💪关注博主和博主一起学习!一起努力!目录标题Linux下基础开发工具gdb调试方法1.启动gdb2.查看源代码3.运行程序4.设置断点5.查看断点信息6.执行下一行代码。7.查看变量8.退出gdbLinux下基础开发工具gdb调试方法程序的发布方式有两种,debug模式和release模式Linuxgcc/g++出来的二进制程序,默认是rele
我有一个使用uclibc在MIPSCPU上运行的多进程程序,它是用gcc4.5.3编译的。其中一个过程(名称为“tv”)需要链接到一个共享库(libtest.so),该库也是我编写的。“tv”进程是用C++编写的,而libtest.so是用C编写的。我还从libtest.so转储了elfheader,它同时设置了PIC和CPIcflags,所以我认为创建库是可以的。当我尝试运行该程序时,除“tv”进程外,所有进程都正常启动。没有错误信息。当我使用ps检查它的状态时,它已经变成了一个僵尸进程。我试过以下方法如果我从链接进程中删除libtest.so,并删除对libtest.so的所有引用
我正在尝试调试一个使用GDB从许多共享库构建的应用程序。gdb的开始:prompt$gdbGNUgdb(GDB)RedHatEnterpriseLinux(7.2-50.el6)Copyright(C)2010FreeSoftwareFoundation,Inc.LicenseGPLv3+:GNUGPLversion3orlaterThisisfreesoftware:youarefreetochangeandredistributeit.ThereisNOWARRANTY,totheextentpermittedbylaw.Type"showcopying"and"showwarra
如果我使用打开了-g和/或-ggdb的gcc编译一些C/C++程序,那么如果我使用gdb启动程序,我可以在gdb中打印变量值。我的问题是,如果没有gdb,我可以从程序内部实现同样的事情吗?在运行时,给定变量的名称(表示为运行时字符串),是否可以读取调试信息,然后获取变量的地址以及类型信息?谢谢。 最佳答案 map文件怎么样?它将包含所有全局变量及其地址的信息。您所要做的就是解析映射文件并获取变量的地址(Python可以提供帮助)。在您的程序中编写一个小例程来接受地址和返回值。如果您将它用于类似目的的日志记录,您可以使用新线程通过套接
如果我需要通过std::function调用,使用调试器单步执行函数对象可能会非常困惑。是否可以通过某种方式跳过这些帧? 最佳答案 gdb7.4为此添加了skip系列命令。(gdb)aproposskipinfoskip--Displaythestatusofskipssetstep-mode--Setmodeofthestepoperationshowstep-mode--Showmodeofthestepoperationskip--Ignoreafunctionwhilesteppingskipdelete--Deletesk