gdb相关内容
我有使用共享库的 Eclipse CDT C++ 应用程序项目.这个库是用调试信息编译的,它的源代码在正确的路径中可用. 现在我尝试使用 Eclipse 和 GDB 调试我的应用程序.如果我在我的应用程序源代码中设置断点,一切都很好.然后我打开包含的共享库的源文件并将断点放在那里.启动调试会话时,我会收到警告 “加载的符号中没有名为 xxx.cpp 的源文件",并且此时不会停止执行.如果我在
..
在 Windows 中,可以通过 此代码.然后线程名会显示在调试器中. 在 MacOSX 中,我看到了一些提示,表明存在线程名.我认为类 NSThread 也有一个名称属性.我的目标是我可以在我的 C++ 应用程序中设置线程名并在 Xcode/gdb 中查看它. 其他相关问题: 我可以设置一个名称吗pthreads/linux 中的线程?(对于 pthread 这里有一个很好的答
..
除了太多的硬件断点/观察点之外,您知道导致无法插入观察点的其他原因吗? 我有以下调试会话: GNU gdb (GDB) 7.1...(gdb) 观看 itrap_t_beg[1][222]硬件观察点 1:itrap_t_beg[1][222](gdb) 续继续....硬件观察点 1:itrap_t_beg[1][222]...(gdb) 续继续.警告:无法插入硬件观察点 1.无法插入硬件断
..
在gdb内部,什么命令会提供被调试进程的pid? 大部分google results 仅讨论如何将 gdb 附加到我们知道 pid 后的进程. 解决方案 一种简单的方法是信息劣化.这里我自己调试 gdb,这个命令显示了被调试对象的 PID: (top-gdb) 信息较差编号 描述 可执行文件* 1 个进程 14068/home/tromey/gdb/build/gdb/gdb 你
..
我正在使用 gdb(在 Xcode 内部)逐步完成一些简单的 Objective-C 代码,并注意到一些奇怪的东西.这是相关的片段: NSString *s = nil;int x = (s == nil); 正如我所料,这两行之后x的值是1.奇怪的是,如果我在 gdb 中尝试类似的东西,它就不一样了: (gdb) print ret$1 = (NSString *) 0x0(gdb) 打印
..
我正在研究一些与安全相关的东西,现在我正在玩我自己的堆栈.我所做的应该很简单,我什至没有尝试执行堆栈,只是为了表明我可以控制我的 64 位系统上的指令指针.我已经关闭了所有我知道的保护机制,只是为了能够使用它(NX-bit,ASLR,也使用 -fno-stack-protector -z execstack 编译).我在 64 位汇编方面没有太多经验,在花了一些时间搜索和试验自己之后,我想知道是否
..
我尝试在每个有意义的函数上设置断点,但程序在到达其中任何一个之前退出.有没有办法让程序从一开始就以逐步模式运行,这样我就可以看到发生了什么? 如果/usr/bin/id 很重要,我正在尝试调试它(我们有自定义插件,但它行为不端) 附:开始命令在这里对我不起作用(应该是评论,但我没有足够的代表) 解决方案 获取程序入口点地址,并在该地址处插入断点. 一种方法是创建信息文件,
..
根据我关于手动生成核心转储文件的问题,我决定深入研究进去弄脏我的手. 我能够构建基本的核心转储结构并将死程序的内存重新放入大 LOAD 部分中的核心转储中.在 GDB 中调试时,我的变量又回来了,这没问题.棘手的部分来了,我如何让 GDB 检索有关程序崩溃时所在位置的信息. 我知道核心转储的注释部分包含此信息(cpu 寄存器等).这是 objdump -h 为“真正的"核心转储提供的内
..
我已经从源代码构建并安装了 GCC 4.8.1: $ gcc -v使用内置规范.COLLECT_GCC=gccCOLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.1/lto-wrapper目标:x86_64-unknown-linux-gnu配置:./configure --disable-multili
..
我有两台相同的 64 位 Centos 5 机器,它们是联网的,并且共享它们的/home 挂载.我在一台机器上编译了一个简单的 Hello World 程序,然后我想出了如何在一台机器上使用 gdb 来远程调试另一台机器上运行的它.当每个人都默认为 64 位时,这似乎工作正常. 但是,如果我用 -m32 编译我的 Hello World 以生成 32 位二进制文件,就像编译我们完整系统的
..
我正在尝试调试我的应用程序通过 JNI 使用的本机共享库.我可以使用“gdbserver --attach pid"附加到正在运行的应用程序,但我需要在启动 gdbserver 命令时实际启动我的应用程序. 关于此主题的博客点击量达到一百万,但似乎没有一个人清楚地说明您如何启动应用程序.他们都说只输入“gdbserver 10.0.2.2:1234 ./MyProgram",但究竟什么是“M
..
我只是尝试在 Mac OSX 版本 10.12 上使用 gdb 调试代码,但在 gdb 中启动我的程序时总是出现这个未知错误. 我在安装后对 gdb 进行了代码签名,并使用 -g 标志编译了我的代码. 这是正在发生的事情: computer:hello user$ gdb a.outGNU gdb (GDB) 7.12版权所有 (C) 2016 Free Software Found
..
到目前为止,使用 gdb + qemu,我可以进入/跳过 linux 内核源代码.是否可以同时调试用户空间程序?例如,将程序从用户空间单步运行到内核空间,这样我就可以通过发出 info registers 来观察 qemu 监视器上寄存器的变化? 解决方案 最小的逐步设置 Mahouk 是对的,但这里有一个 全自动 QEMU + Buildroot 示例 假设你 已经知道如何使用 Q
..
我正在尝试在 ARM 上使用 gdbserver 调试软件以获取崩溃的回溯.不幸的是,我只得到问号.在任何地方,我都读到这个问题只是与缺少符号有关,但符号并没有从我的库中删除. 如果我尝试使用 file 命令在客户端加载符号,我会得到: 正在从 /libQtWebKit.so.4.7.2 读取符号...(未找到调试符号)...完成. 然后,当崩溃发生时: 程序收到信号SIG
..
首先,我要声明我目前的开发环境是 Windows 7 下的 MSYS + mingw-w64 + ActivePython 并且在平常的日子里我主要是 Linux 开发人员.我不高兴获得或编译带有调试符号的 Python 库版本. 理想情况下,我需要 Python27.dll 文件的 32 位和 64 位调试版本.我希望能够在 C++ 中嵌入 Python 和实现 Python 扩展,并且能
..
我得到了一个看起来与我通常得到的非常不同的内核 - 大多数线程都在 __kernel_vsyscall() 中: 9 process 11334 0xffffe410 in __kernel_vsyscall()8 进程 11453 0xffffe410 在 __kernel_vsyscall()7 进程 11454 0xffffe410 在 __kernel_vsyscall()6 进程 1
..
..
没有深入挖掘 GDB 源代码,我在哪里可以找到有关用于创建核心文件的格式的文档? ELF 规范使核心文件格式保持开放,所以我想这应该是一部分GDB 规范!遗憾的是,我没有从 GNU 的 gdb 文档中找到这方面的任何帮助. 这就是我想要做的事情:将虚拟地址映射到包含正在运行的进程的可执行文件/库中的函数名称.为此,我首先想从核心文件中找出从虚拟地址空间到可执行文件/库名称的映射,然后挖
..
我有一个带有 printDebug 方法的类.它没有在代码中的任何地方使用,但我想在使用 gdb 调试时使用它(使用调用).这基本上是以格式良好的方式打印对象的内容,例如我可能有一个集合向量.用于此的 g++ 选项是什么?我试过 -O0 但这不起作用. 我使用的解决方法是在构造函数中进行伪调用以调试打印并提供一个布尔值来指示您是否真的想要打印或什么都不做.这工作正常,但必须有更好的方法来做到
..
我有一个带有共享库(动态加载)的项目,我正在尝试调试它.我收到以下错误消息: 没有名为/home/username/Code/path/to/project/MyFile.cpp 的源文件. 在搜索了其他线程之后,我确保我正在使用 -g 进行编译,并且相应的文件夹位于调试配置的源路径选项卡上.奇怪的是它给出了正确的绝对路径:它引用的文件确实存在,所以我不明白为什么它认为它不存在. 有人知
..