Questions tagged «gdb»

使用此标记可解决与GDB(GNU软件系统的标准调试器)相关或相关的问题。

4
GDB:如果变量等于值则中断
当变量等于我设置的某个值时,我想让GDB设置一个断点,我尝试了以下示例: #include <stdio.h> main() { int i = 0; for(i=0;i<7;++i) printf("%d\n", i); return 0; } GDB的输出: (gdb) break if ((int)i == 5) No default breakpoint address now. (gdb) run Starting program: /home/SIFE/run 0 1 2 3 4 5 6 Program exited normally. (gdb) 如您所见,GDB没有任何断点,GDB是否可以做到这一点?
89 c  gdb 


3
使用gdb在指定的可执行文件之外单步执行汇编代码会导致错误“找不到当前函数的边界”
我不在gdb的目标可执行文件之外,甚至没有对应于该目标的堆栈。无论如何,我都想单步执行,以便我可以验证汇编代码中发生的事情,因为我不是x86汇编方面的专家。不幸的是,gdb拒绝执行此简单的程序集级调试。它允许我在适当的断点处设置和停止,但是一旦我尝试单步执行,gdb就会报告错误“找不到当前函数的边界”,并且EIP不会更改。 额外细节: 机器代码是由gcc asm语句生成的,我从objdump -d的输出将其复制到了正在执行的内核内存位置。我不介意使用加载程序将目标代码加载到重定位地址的简单方法,但是请记住,加载必须在内核模块中完成。 我想另一种选择是产生一个伪造的内核模块或调试信息文件以提供给gdb,使它相信该区域在程序代码内。gdb在内核可执行文件本身上运行良好。 (对于那些真正想知道的人,我是在运行时将代码插入VMware VM内的Linux内核数据空间中,然后通过gdb调试它,通过VMware Workstation的内置gdb存根对内核进行远程调试。注意,我不是在编写内核漏洞利用;我是写原型的安全研究生。) (我可以在程序集中的每条指令上设置一个断点。这可以工作,但是一段时间后会变得很费力,因为x86汇编指令的大小各不相同,并且每次重新启动时程序集的位置都会改变。)

2
如何使GDB断点仅在达到给定次数后才断点?
我有一个被多次调用的功能,最终会出现段错误。 但是,我不想在此函数上设置断点并在每次调用它后都停止,因为我将在这里呆了多年。 我听说我可以counter在GDB中为断点设置一个值,并且每次遇到断点时,计数器都会递减,并且仅在counter= 0时才会触发。 这是准确的吗?如果可以,我该怎么做?请提供用于设置此类断点的gdb代码。
85 gdb  breakpoints 

8
为什么GDB会在行与行之间意外地跳转并将变量打印为“ <值优化输出>”?
谁能解释gdb的这种行为? 900 memset(&amp;new_ckpt_info,'\0',sizeof(CKPT_INFO)); (gdb) **903 prev_offset = cp_node-&gt;offset;** (gdb) **905 m_CPND_CKPTINFO_READ(ckpt_info,(char *)cb-&gt;shm_addr.ckpt_addr+sizeof(CKPT_** HDR),i_offset); (gdb) **903 prev_offset = cp_node-&gt;offset;** (gdb) **905 m_CPND_CKPTINFO_READ(ckpt_info,(char *)cb-&gt;shm_addr.ckpt_addr+sizeof(CKPT_ HDR),i_offset);** (gdb) **908 bitmap_offset = client_hdl/32;** (gdb) **910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);** (gdb) **908 bitmap_offset = client_hdl/32;** (gdb) **910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);** (gdb) **908 bitmap_offset = client_hdl/32;** (gdb) **910 …

4
“ EXC_BREAKPOINT(SIGTRAP)”异常是否由调试断点引起?
我有一个多线程应用程序,该程序在所有测试机上都非常稳定,并且几乎对我的每个用户都是稳定的(基于对崩溃的抱怨)。不过,该应用程序经常会崩溃,因为一位用户足够发送崩溃报告。所有崩溃报告(约10个连续报告)看起来基本相同: Date/Time: 2010-04-06 11:44:56.106 -0700 OS Version: Mac OS X 10.6.3 (10D573) Report Version: 6 Exception Type: EXC_BREAKPOINT (SIGTRAP) Exception Codes: 0x0000000000000002, 0x0000000000000000 Crashed Thread: 0 Dispatch queue: com.apple.main-thread Thread 0 Crashed: Dispatch queue: com.apple.main-thread 0 com.apple.CoreFoundation 0x90ab98d4 __CFBasicHashRehash + 3348 1 com.apple.CoreFoundation 0x90adf610 CFBasicHashRemoveValue + 1264 2 com.apple.CoreText 0x94e0069c …

13
尝试将GDB附加到进程时如何解决“不允许的ptrace操作”?
我正在尝试使用gdb附加程序,但它返回: 附加到进程29139 无法附加到进程。如果您的uid与目标进程的uid相匹配,请检查/ proc / sys / kernel / yama / ptrace_scope的设置,或者以root用户的身份重试。有关更多详细信息,请参见/etc/sysctl.d/10-ptrace.conf ptrace:不允许操作。 gdb-debugger返回“无法附加到进程,请检查特权,然后重试。” strace返回“附加:ptrace(PTRACE_ATTACH,...):不允许操作” 我将“ kernel.yama.ptrace_scope”从1更改为0,将/proc/sys/kernel/yama/ptrace_scope1更改为0,并尝试set environment LD_PRELOAD=./ptrace.so使用此方法: #include &lt;stdio.h&gt; int ptrace(int i, int j, int k, int l) { printf(" ptrace(%i, %i, %i, %i), returning -1\n", i, j, k, l); return 0; } 但是它仍然返回相同的错误。如何将其附加到调试器?
80 c  linux  debugging  gdb  strace 

3
警告:禁用地址空间随机化时出错:不允许操作
我做错了(或没有做过)gdb对我来说不正确的是什么? root@6be3d60ab7c6:/# cat minimal.c int main() { int i = 1337; return 0; } root@6be3d60ab7c6:/# gcc -g minimal.c -o minimal root@6be3d60ab7c6:/# gdb minimal GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1 . . . Reading symbols from minimal...done. (gdb) break main Breakpoint 1 at 0x4004f1: file minimal.c, line 3. (gdb) run Starting program: …
78 c  docker  gdb 

6
<值优化输出>在gdb中是什么意思?
(gdb) n 134 a = b = c = 0xdeadbeef + ((uint32_t)length) + initval; (gdb) n (gdb) p a $30 = &lt;value optimized out&gt; (gdb) p b $31 = &lt;value optimized out&gt; (gdb) p c $32 = 3735928563 gdb如何优化我的价值?
77 gdb 

7
调试选项-g如何更改二进制可执行文件?
编写C / C ++代码时,为了调试二进制可执行文件,必须在编译器/链接器上启用debug选项。对于GCC,该选项为-g。启用调试选项后,对二进制可执行文件有何影响?文件中还存储哪些其他数据,以允许调试器功能正常运行?
75 gcc  gdb  debugging 

9
如何转到GDB中的上一行?
gdb是否有可能在当前正在执行的行之前转到一行。例如: void my_fun( somePtrType** arr,int start,int end) { // arr is an array of pointers to somePtrType //line a ... some assignments swap(&amp;arr[ind1] , &amp;arr[ind2] ) ; //line b (current line ) } 我目前在b行,可以检查arr那里的值,但是我想回到a行并检查当时的内容arr。 我认为这可能是不可能的,因为调试器可以慢动作地运行代码,但不能使其反向执行。 还有更多见识..
75 debugging  gdb 

3
如何使用GDB检查堆栈框架?
现在,我一直在使用GDB分解二进制文件,并检查不同的寄存器等等。是否有一个简单的命令来检查堆栈上的所有内容?可以限制到函数中的所有内容吗?
74 gdb  stack 

3
自动化GDB调试会话的最佳方法是什么?
GDB是否具有内置的脚本编制机制,我应该编写一个期望脚本,还是那里有更好的解决方案? 我每次都会发送相同的命令序列,并将每个命令的输出保存到文件中(很可能使用GDB的内置日志记录机制,除非有人有更好的主意)。

3
如何在gdb中附加进程
我有一个简单的C程序,该程序会分叉一个进程,然后运行一个可执行文件。 我想将子进程附加到gdb。 我在控制台中运行主程序,然后打开另一个控制台以查找子进程的pid,然后使用以下命令启动gdb: gdb attach 12271 12271子进程ID在哪里,但是附加失败并显示: No such file or directory. 知道为什么吗?
73 unix  gdb 

1
如何在gdb中禁用新线程/退出线程的消息?
我正在调试应用程序,并且收到很多这样的消息: [New Thread 0x7fffde152700 (LWP 11142)] [Thread 0x7fffde152700 (LWP 11142) exited] [New Thread 0x7fff967fa700 (LWP 11143)] [Thread 0x7fff967fa700 (LWP 11143) exited] [New Thread 0x7fff967fa700 (LWP 11144)] [Thread 0x7fff967fa700 (LWP 11144) exited] [New Thread 0x7fff967fa700 (LWP 11145)] [Thread 0x7fff967fa700 (LWP 11145) exited] [New Thread 0x7fffde152700 (LWP 11146)] [Thread 0x7fffde152700 (LWP 11146) …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.