Tag: gdb

调试C运行时

我想详细了解使用GDB在main()之前和之后发生的事情。 仅仅用-g重新编译glibc并链接到那个就足够了吗?

Eclipse CDT中的方法/function断点

我正在调试为调试而编译的可执行文件(没有源代码)。 GDB可以选择在特定function上设置断点,例如break division() 有没有办法在Eclipse CDT中做同样的事情??? 谢谢 !

GDB – 我可以在内存中找到大数据元素

我有一个程序,它有大量静态定义的变量。 如果我在GDB中启动它,在main中有一个断点,然后运行pmap,我看到已经分配了大约100MB的数据: 08838000 107576K rw— [ anon ] 我已经找到了一堆具有巨大静态定义数组(例如200,000英寸)的函数,并在我找到它们时将它们除掉。 有没有办法找出堆/数据段上最大的项目是什么? 在GDB中还是通过任何其他方式?

eclipse调试模式下的GDB找不到stdlib / rand.c

我试图让gdb在ubuntu上运行eclipse cdt来开始调试一些简单的程序。 所以我做了必要的步骤以使其运行: 1.创建可执行项目 2.编译 3.跑 4.创建文件.gdbinit并将其放在主项目文件夹中 5.设置一些调试器配置 : 5.我还试图找到一个看起来像这样的.gdbinit文件: set schedule-multiple dir ~/gcc_build/4.7.2/build/gcc dir ~/gcc_build/4.7.2/gcc dir ~/gcc_build/4.7.2/gcc/cp dir ~/gcc_build/4.7.2/gcc/lto source ~/gcc_build/4.7.2/build/gcc/gdbinit.in 但是我的计算机中没有发现类似的东西,即使在做了以下情况之后: # find / -name .gdbinit 所以,我的文件.gdbinit最终得到了简单的内容 – 是的只有: set new-console on 然后我点击了Apply和Debug: gdb按预期开始正常工作。 我按下“step over / F6”按钮,调试器逐步跳过代码。 直到它到达命令rand()并且gdb挂起并显示消息: Can’t find a source file at “/build/buildd/eglibc-2.19/stdlib/rand.c” Locate the file or edit the source […]

gdb:退出程序而不退出gdb

我正在使用gdb调试程序。 首先,我load我的可执行文件,然后continue运行该程序。 我有时想要中断我的程序的执行,所以我做Ctrl + C 我的问题是这关闭了我的程序和gdb。 如何在不退出gdb的情况下退出程序?

在eclipse cdt中调试fork()

我正在尝试使用eclipse cdt(Juno)调试一些fork()机制。 我用C编写了程序。 if( -1 == (pid = fork()) ) /* error */ goto cleanup; else if ( 0 == pid ) /* child */ { execlp(“gcc”, “gcc”, cFilePath, “-o” , GCC_OUTPUT_FILE_NAME, NULL); goto cleanup; /* Arrives here only on error! */ } else if (pid > 0) /* parent – checks: correct pid returns, […]

gdb,为什么“下一步”显示每个源代码行两次?

每个人,当在gdb中使用“next”指令时,我发现每行源代码显示两次—–我很确定,这些代码不在任何循环中。这是现象: (gdb) frame #0 ap_get_client_block (r=0x8560d48, buffer=0xb68501b7 “SMS101SMSMsgFilterReq13925237429abc圲34¨圲23a露07\214圲21¢<237朲11?东215圲10°<214朲27¥応227露07\214正常,hao”…, bufsiz=81920) at http_filters.c:1540 1540 if (r->remaining read_chunked && r->remaining == 0)) { (gdb) n 1544 bb = apr_brigade_create(r->pool, r->connection->bucket_alloc); (gdb) 1545 if (bb == NULL) { (gdb) 1544 bb = apr_brigade_create(r->pool, r->connection->bucket_alloc); (gdb) 1545 if (bb == NULL) { —– 1544,1545行没有任何循环,但是他们重复了。 愿有人开导我吗?

如何使用GDB在给定函数的范围内声明变量?

我知道gdb允许使用set命令设置已声明的变量。 是否有可能gdb在给定函数的范围内动态声明一个新变量?

为什么GDB启动一个新shell以及如何禁用此行为?

我正在弄清楚一个问题,从GDB启动应用程序会导致符号查找错误,但从shell启动它的工作原理。 事实certificate,无论何时从GDB内部启动程序,它都会启动一个新的shell,从而覆盖我在启动GDB之前设置的所有环境变量(如LD_LIBRARY_PATH )。 这不是我想要的行为。 有人可以解释这背后的理由,或者告诉我如何解决这个问题?

在Windows上的Ubuntu上的Bash上的Eclipse C / C ++项目

我已经安装了Eclipse Neon(v4.6)。 另外,我有“在Windows上使用Ubuntu进行Bash”(2016年9月)。 我安装了gcc和gdb用于在C中进行编译和调试。我在终端上测试了它们并且它们正在运行。 我正在尝试使用Eclipse来创建一个新的C项目,但是在编译器选择阶段,它并没有让我选择使用“Windows上的Bash on Ubuntu”编译器。 有什么方法可以解决我的问题吗?