相关疑难解决方法(0)

反向调试如何工作?

GDB有一个支持反向调试的新版本(参见http://www.gnu.org/software/gdb/news/reversible.html).我想知道它是如何工作的.

为了使反向调试工作,在我看来,您需要存储整个机器状态,包括每个步骤的内存.这会使性能变得非常慢,更不用说使用大量内存了.这些问题是如何解决的?

reverse-debugging

80
推荐指数
5
解决办法
2万
查看次数

如何转到GDB的上一行?

是否有可能在gdb中转到当前执行行之前的一行.例如:


void my_fun( somePtrType** arr,int start,int end)
{
 // arr is an array of pointers to somePtrType
  //line a
 ... some assignments
 swap(&arr[ind1] , &arr[ind2] ) ;
 //line b (current line )
}
Run Code Online (Sandbox Code Playgroud)

我现在在b行,可以检查arr那里的值,但我想回到第一行并检查arr那时的内容.

我认为这可能是不可能的,因为调试器可以以慢动作运行代码,但不能使其向后执行.
更多见解..

debugging gdb

65
推荐指数
5
解决办法
6万
查看次数

是否有可能在pdb中倒退?

在我点击n来评估一条线之后,我想回去然后点击s以进入该功能,如果它失败了.这可能吗?

文档说:

j(ump)lineno 设置将要执行的下一行.仅适用于最底部的框架.这使您可以跳回并再次执行代码,或者跳转到跳过您不想运行的代码.

python pdb

48
推荐指数
3
解决办法
2万
查看次数

如何在多线程程序上启用反向调试?

我正在尝试在多线程项目(使用libevent)上使用gdb 7.3.1的反向调试功能,但是我收到以下错误:

(gdb) reverse-step
Target multi-thread does not support this command.
Run Code Online (Sandbox Code Playgroud)

这个问题,我想也许加载libthread_db是一个问题但是,当我运行程序时,gdb说:

Starting program: /home/robb/slug/slug 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/libthread_db.so.1".
Run Code Online (Sandbox Code Playgroud)

如何在多线程项目中使用gdb 7.3.1启用反向调试?可能吗?

multithreading gdb reverse-debugging

30
推荐指数
1
解决办法
6913
查看次数

在glibc(LD_HWCAP_MASK,/ etc/lt.so.nohwcap)中禁用AVX优化函数以获取valgrind和gdb记录

用glibc现代x86_64的Linux将检测到CPU具有支持AVX扩展,并会从通用实现许多字符串函数切换到AVX优化版(带ifunc调度员的帮助:1,2).

这个功能可以很好地提高性能,但它可以防止像valgrind(较旧的libVEXs,在valgrind-3.8之前)和gdb的" target record"(反向执行)之类的工具正常工作(Ubuntu"Z"17.04 beta,gdb 7.12 .50.20170207-0ubuntu2, gcc 6.3.0-8ubuntu1 20170221,Ubuntu GLIBC 2.24-7ubuntu2):

$ cat a.c
#include <string.h>
#define N 1000
int main(){
        char src[N], dst[N];
        memcpy(dst, src, N);
        return 0;
}
$ gcc a.c -o a -fno-builtin
$ gdb -q ./a
Reading symbols from ./a...(no debugging symbols found)...done.
(gdb) start
Temporary breakpoint 1 at 0x724
Starting program: /home/user/src/a

Temporary breakpoint 1, 0x0000555555554724 in main ()
(gdb) …
Run Code Online (Sandbox Code Playgroud)

linux linker gdb glibc avx

12
推荐指数
2
解决办法
2233
查看次数

有人试过在gdb中进行反向调试吗?

有没有人尝试在新发布的gdb-7.0中使用新的记录/重放和反向调试功能?我是gdb开发人员/维护人员之一,我非常渴望获得用户反馈!

gdb reverse-debugging

10
推荐指数
1
解决办法
2087
查看次数

是否有一个调试器让我倒退代码?

可能重复:
双向(或反向)调试

我查了一下Omniscient Debugger(http://www.lambdacs.com/debugger/ODBDescription.html),但它特定于Java.是否有任何调试器具有与本机应用程序相同的功能,即C/C++?

我没有说清楚.我想打破虚假数据值/代码路径,然后"回滚",向后调试,直到我在代码/逻辑/设计中发现错误.

我知道我可以逐步"向前"调试,我想向后做同样的事情,因此调试器需要在每一步中保存其上下文.

c c++ debugging

8
推荐指数
2
解决办法
1750
查看次数

gdb反向调试avx2

所以我有一个新的花哨cpu支持avx2指令集.这很好,但打破了gdb反向调试.在没有优化的情况下进行编译时,代码仍然使用共享库,例如调用memset()然后调用memset的avx2优化版本.这很好,但gdb记录不支持avx2.

进程记录不支持地址0x7ffff690dd80处的指令0xc5.

0xc5是这里的vex前缀.

反向调试适用于不支持avx2的cpu.如何让libc等不使用avx2优化版本的库调用,以便我可以使用gdb记录,向后退步等?

我试过了

LD_BIND_NOW=1
LD_HWCAP_MASK=0
compiling with -static
Run Code Online (Sandbox Code Playgroud)

如果没有在旧机器上调试,我就没有想法了.

c gdb glibc avx2

6
推荐指数
1
解决办法
839
查看次数

标签 统计

gdb ×5

reverse-debugging ×3

c ×2

debugging ×2

glibc ×2

avx ×1

avx2 ×1

c++ ×1

linker ×1

linux ×1

multithreading ×1

pdb ×1

python ×1