我想用便捷的variables来收集一些事情。 我找不到任何有关便捷variables的stringconcactenation。 所以我尝试了一些东西。 看一下这个: (gdb) set $foo="foo" (gdb) p $foo $45 = 0x84c7fd8 "foo" (gdb) call strcat($foo,"bar") $46 = 139231192 (gdb) p $foo $47 = 0x84c7fd8 "foobar" 好,所以我试图更难以崩溃: (gdb) set $foo="foo" (gdb) set $bar="blue" (gdb) p $foo $48 = 0x85d9100 "foo" (gdb) p $bar $49 = 0x83cd1e8 "blue" (gdb) call memset($foo,' ',100000) $50 = 140349696 […]
运行linux内核3.6.6-1,gcc 4.7.2-2,下面的程序: 1 #include <vector> 2 using namespace std; 3 int main () 4 { 5 vector<size_t> a (1 << 24); 6 return 0; 7 } 从来没有从第5行返回。 当我在gdb中运行时,发现它被卡在stl_algobase.h 743/744行: 0x000000000040101c in std::__fill_n_a<unsigned long*, unsigned long, unsigned long> (__first=0x7fffeffd8060, __n=16777216, __value=@0x7fffffffe0a8: 0) at /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_algobase.h:743 740 __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value) 741 { 742 const […]
我正在用GDBdebugging我的C程序,它有点不可思议,可能是因为我没有使用glibc,所以它不检测新的线程,直到它断了。 我通过添加一个立即恢复的断点来解决这个问题。 然而今天,我碰到了一堵墙。 我需要execve()真快,所以正常的fork()是不可能的(将使用大量的内存),我不能vfork()(我需要一个堆栈来设置pipe道等),所以我用相同的方法与此库(https://code.google.com/p/popen-noshell/)中基本上只克隆CLONE_VM一样。 这个(或者通常调用execve() – 我真的不知道))会让GDB由于某种原因而感到困惑 – 基本上它是这样输出的: [New LWP 516] [New LWP 520] [New LWP 519] [New LWP 521] LWP 521 is executing new program: /bin/bash Error in re-setting breakpoint 1: No source file named xxx.c. Error in re-setting breakpoint 2: No source file named yyy.c. Error in re-setting breakpoint 4: Function "zzz_main" […]
像GDB这样的debuggingfunction是通过设置eflags寄存器的TF标志来实现的,它在处理器执行每一个指令后都会导致一个exception,让gdb等工具可以控制debugging。当我们运行一个虚拟机时,如果是kvm,执行同样的事情,你需要设置一个名为“MONITOR TRAP FLAG”的标志(目前的intel软件手册3c第15页),这会在每次给予pipe理程序debugging权限的指令之后导致虚拟主机退出(VMEXIT)。 pipe理程序可以设置虚拟机(guest)的几乎任何位/寄存器。 为什么我们在VMCS(虚拟Macine控制结构)中需要一个单独的标志,当这样一个标志已经存在于体系结构(EFLAG)? 我在某处读到,其原因是,如果使用EFLAGS,guest可以覆盖VMM(hypervisor)意向单步执行。 A:如果你没有控制权,模拟硬件有什么意义? B:我面临一个问题,我需要设置BTF(分支陷阱标志)(PG 689 vOLUME 3a INTEL sotfware手册)。 在正常情况下,这会导致每个分支指令上的DEBUG EXCEPTION,但是由于我想在VM上这样做,所以我无法确定在VMCS中设置哪个位。 似乎没有直接的办法,就像单步执行一样。 任何人都可以让我知道如果有某种方式使用其他方式做同样的事情? 谢谢
我试图远程debugging我的本地networking中的服务器上的应用程序。 服务器: $ uname -a Linux broatyctl.localdomain 3.6.11.2-rt33.39.el6rt.x86_64 #1 SMP PREEMPT RT Thu Jul 4 06:46:48 EDT 2013 x86_64 x86_64 x86_64 GNU/Linux $ gdbserver –version GNU gdbserver (GDB) Red Hat Enterprise Linux (7.2-60.el6_4.1) Copyright (C) 2010 Free Software Foundation, Inc. gdbserver is free software, covered by the GNU General Public License. This gdbserver was configured […]
我有以下代码。 它只是调用ptrace(PTRACE_TRACEME)然后进入无限循环。 我有两个问题。 1. after executing this binary, I can't attach gdb even if I am root. 2. with ptrace(PTRACE_TRACEME), I can't terminate the process with Ctrl-C (SIGINT). it simply stops. 有人可以解释我的原因? 先谢谢你。 PS。 我知道大多数debugging器都会派生子,并在execve()之前调用ptrace(PTRACE_TRACEME)。 没必要提醒我这个。 #include <sys/ptrace.h> #include <sys/reg.h> #include <sys/wait.h> #include <sys/types.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <errno.h> #include <string.h> int […]
我怎样才能debugging(并达到一些断点)与gdb我的越野车程序(使用GTK3)显示: (monimelt:161): Gtk-WARNING **: Invalid text buffer iterator: either the iterator is uninitialized, or the characters/pixbufs/widgets in the buffer have been modified since the iterator was created. You must use marks, character numbers, or line numbers to preserve a position across buffer modifications. You can apply tags and insert marks without invalidating your iterators, but […]
当用gdb打开coredump的时候,gdb会尝试把完整的coredump加载到内存中吗? 我们在其中一个分段系统上发现了一个35Gb的芯片。 我们的操作指令要求使用gdb创build一个回溯。 恐怕gdb会尝试将完整的coredump加载到内存中,并通过使用所有可用的内存来使暂存区域不可用。 我们在RedHat EL 5 / 64bit安装上使用gdb 7.0.1。
我试图从我的32位英特尔笔记本电脑远程英特尔64位机器上进行debugging(一个简单的Hello World应用程序没有testing错误)。 我跑 gcc -g -o cexecute cexecute.c gdbserver localhost:2345 cexecute 在远程机器上。 将笔记本本地端口2345转发到同一个远程端口后,运行gdb并键入 target remote localhost:2345 我得到: GNU gdb (GDB) 7.5-ubuntu Copyright (C) 2012 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the […]
见我的 $uname -a Linux hostmachine 4.1.2-2-ARCH #1 SMP PREEMPT Wed Jul 15 08:30:32 UTC 2015 x86_64 GNU/Linux 我正在尝试学习如何使用GDB来debuggingC程序。 如果我能用GDB来发现导致段错误的错误,我认为这将是特别优秀的。 我已经写了一个小程序,作为K&R的练习1-13的解决scheme,给定一个特定大小的inputstring,它将产生一个段错误: $ ~/learning_c/KR_exercises/chapter_1/1.13.x – 我从stdin提供一个string,… – Segmentation fault (core dumped) 根据Arch wiki ,“Systemd的默认行为是为/var/lib/systemd/coredump/所有进程生成核心转储。 Okie doke: $ls /var/lib/systemd/coredump/ core.1\x2e13\x2ex.1000.0da6be3a2b4647c8befe14e0e73af848.1719.1438627150000000.lz4 但是当我运行: $ gdb -q ~/learning_c/KR_exercises/chapter_1/1.13.x /var/lib/systemd/coredump/core.1\\x2e13\\x2ex.1000.0da6be3a2b4647c8befe14e0e73af848.1719.1438627150000000.lz4 我得到: Reading symbols from /home/dean/learning_c/KR_exercises/chapter_1/1.13.x…done. "/var/lib/systemd/coredump/core.1\x2e13\x2ex.1000.0da6be3a2b4647c8befe14e0e73af848.1719.1438627150000000.lz4" is not a core dump: File […]