将此标记用于与GDB相关的问题,GDB是GNU软件系统的标准调试器。
示例代码: 结构消息{ 虚拟 int id() const { 返回 0; } }; 结构 Ping : 公共消息 { 虚拟 int id() const { 返回 1; } }; 假设您在 gdb 中加载了一个核心文件。 这里...
我正在编写一个脚本来检查核心转储。目标是使用 while 循环执行 gdb 命令进行分析。 #!/usr/local/bin/bash # # 提取核心文件信息的脚本 # #二进制...
我正在编写一个gdb脚本来分析核心文件。其目的如下: 1]我正在寻找分散在64Mb空间中的数据包。该数据包的幻数为 4 字节。母鸡...
我正在调试崩溃,我看到以下行为 - 当我将 GDb 附加到进程并执行信息寄存器时,我看到 esp 的以下值 - ESP 0xfd2475d0 0xfd2475d0 d...
下面代码的错误是memcpy(t[j], m[j], sizeof(int) * DIM * DIM);应该是 memcpy(t[j], m[j], sizeof(int) * DIM);: // 无标题7.c #包括 #包括 以下代码中的错误是memcpy(t[j], m[j], sizeof(int) * DIM * DIM);应该是memcpy(t[j], m[j], sizeof(int) * DIM);: // Untitled7.c #include <stdio.h> #include <string.h> #define DIM 1000 int main(void) { int m[DIM][DIM], t[DIM][DIM]; unsigned j, k; for(j = 0; j < DIM; j++) for(k = 0; k < DIM; k++) m[j][k] = j * DIM + k; for(j = 0; j < DIM; j++) memcpy(t[j] ,m[j], sizeof(int) * DIM * DIM); // only one DIM for(j = 0; j < DIM; j++) for(k = 0; k < DIM; k++) m[j][k] = t[DIM-k-1][j]; return 0; } 使用 gdb 如何找到该错误?我了解了如何创建核心文件(使用ulimit -c unlimited),然后我使用了$ gdb Untitled7 core,它给出了: ... Reading symbols from Untitled7...done. [New LWP 10610] Core was generated by ` ? @ A'. // and symbols of binary files Program terminated with signal SIGSEGV, Segmentation fault. #0 __memcpy_ssse3 () at ../sysdeps/i386/i686/multiarch/memcpy-ssse3.S:2590 2590 ../sysdeps/i386/i686/multiarch/memcpy-ssse3.S: File o directory non esistente. // File or directory not existent. 之后我该怎么办? 您不能总通过这种方式找到真正的错误,但您可以找到发生分段违规的位置。 您需要使用调试信息编译程序,最好不进行优化,即使用 -ggdb -O0 编译标志。如果违规发生在库函数内部(如您的示例所示),请使用 gdb 命令 up 向上移动调用堆栈,直到到达代码。然后您应该会看到程序的有问题的行。 确保gdb可以找到您的来源。通常当你的当前目录是你的构建目录时,gdb可以找到它们。如果没有,请使用 directory 的 gdb 命令。
我有一个程序 myprog,我一直在 valgrind 下运行: /usr/bin/valgrind --tool=massif --tool=memcheck --leak-check=yes --track-origins=yes --log-file=/tmp/valgrind%p /opt/bin/myprog 我...
大家。 我正在尝试使用其核心文件和 gdb 修复 ceph 中的问题。 根据以下输出,gdb 应该已成功从 ceph-debuginfo 加载调试符号: 读取符号...
我有一个系统进程核心,如果它分配的内存超过配置的限制,它就会杀死进程。 看来进程崩溃是因为内存碎片。 为了确认我想知道...
用gdb(gdb main)调试程序时,会显示很多积分和链接。我知道我们可以使用安静参数来禁用此文本,但我想永久禁用它。 gdb 有
在我的程序中,IP 前缀存储为 Trie。我想从程序生成的 linux coredump 中转储 trie。我已经有一个 C 函数,可以遍历树并打印...
如何使用gdb确定核心文件中pthread_raise(sig=6)的原因
我的应用程序有时会崩溃,但我找不到原因。我的应用程序是多线程(QThread)并使用多个QUdpSockets。我认为这是由于同时访问套接字而发生的,但我不知道什么时候......
如何根据 /proc/pid/maps、/proc/pid/coredump_filter、top 显示的值(如 VIRT RES 等)预测核心文件的大小? 一般来说,尺寸是多少...
我目前正在设置一个调试器,但无论我尝试如何尝试,它总是卡在设置 lib6:i386 上。 正在阅读包裹清单...完成 构建依赖树...完成 阅读状态
我遇到了 GDB 的奇怪行为。当对从 C++ 中的多线程应用程序转储的核心进行事后分析时,调试器命令 BT 在哪里 线程信息 从来没有...
我想写一个可以在Linux中读取核心文件的程序。但是我找不到任何可以在这方面指导我的文档。有人可以指导我在哪里可以找到一些资源吗...
我还没有从 stackoverflow.com 找到这个问题的任何答案。 % uname -a HP-UX rx3600 B.11.31 U ia64 2782985371 在Linux中,我可以从核心转储文件中获取文件名,如下所示。 “g服务器”...
我的系统中生成了一些核心转储文件,但这些核心文件的后缀只有时间戳,没有进程ID信息。 所以核心内有任何进程 ID 相关信息
GDB 和 corefiles 导致“无法从内存读取有效的对象文件图像。”
在一个相当旧的Linux系统上,我无法获得gdb随后可以读取的核心转储。内核版本是3.8.13,libc版本是2.3.4。 ulimit -c 设置为无限制且 /proc/sys/...
我有一个用以下命令组装和链接的汇编文件: $ nasm -f elf -F 矮人 -g -o 文件名.o 文件名.asm $ ld -o 文件名 文件名.o 正如你所看到的,我添加了 -g 所以 nasm 基因......
在 Linux 上以编程方式为 gdb 在 C 或 C++ 代码中设置断点
如何以编程方式在 C 或 C++ 代码中设置适用于 Linux 上的 gdb 的断点? IE。: int main(int argc, char** argv) { /* 在这里设置断点! */ 整数a = 3; 一个++; /* 在...