GDB: Lessfs; How to Trace

2019-07-31 06:23发布

问题:

I am trying to trace this open source program called lessfs: and inline data deduplication filesystem for linux, but I am having trouble stepping through step by step using GDB

Lessfs can be found here: http://www.lessfs.com/wordpress/

Are there any other tools recommended for tracing large open source programs as such? The source code is about 3,000 lines with multiple files, and I understand which part of the files I would be working on, but it would be great if there were a program that showed me step by step, which methods are being called and such, just as GDB does

Currently, I having complications on how to actually implement this:

Since I am not really running a simple C file into GDB, but rather a group of large C files, I am a little lost on how to properly run GDB knowing there are multiple files

Here are the commands that I am using regularly, which can be found here in this tutorial:

http://www.linuxjournal.com/content/data-deduplication-linux

Regular commands (without GDB)

sudo cp etc/lessfs.cfg /etc/

sudo mkdir -p /data/{dta,mta}

///** Above are pre requisites **///

///** To start lessfs **///

./lessfs

sudo mklessfs -c /etc/lessfs.cfg

sudo lessfs /etc/lessfs.cfg /mnt

///** Testing **///

df -t fuse.lessfs

ls -a /mnt/

sudo r dd if=/dev/zero of=/mnt/test.dat bs=1M count=100

df -t fuse.lessfs

///** Using GDB **///

Now running with GDB (I have found an idea here: https://groups.google.com/forum/#!msg/lessfs/dkXDckXYnqw/ns5NpDegL_YJ)

gdb ./lessfs

set args /etc/lessfs.cfg /fuse -d -o\ hard_remove,negative_timeout=0,entry_timeout=0,attr_timeout=0,use_ino,readdir_ino,default_permissions,allow_other,big_writes,max_read=131072,max_write=131072

(Running it, am I doing it properly??)

(gdb) r mklessfs /etc/lessfs.cfg
Starting program: /home/hb2/lessfs/lessfs1/lessfs mklessfs /etc/lessfs.cfg
warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7ffff7ffa000
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[Inferior 1 (process 3621) exited with code 0377]


(gdb) r lessfs /etc/lessfs.cfg /mnt
Starting program: /home/hb2/lessfs/lessfs1/lessfs lessfs /etc/lessfs.cfg /mnt
warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7ffff7ffa000
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[Inferior 1 (process 3633) exited with code 0377]


(gdb) r df -t fuse.lessfs
Starting program: /home/hb2/lessfs/lessfs1/lessfs df -t fuse.lessfs
warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7ffff7ffa000
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Program received signal SIGUSR1, User defined signal 1.
0x00007ffff7386707 in kill () from /lib/x86_64-linux-gnu/libc.so.6


(gdb) r dd if=/dev/zero of=/mnt/test.dat bs=1M count=100
The program being debugged has been started already.
Start it from the beginning? (y or n) y

Starting program: /home/hb2/lessfs/lessfs1/lessfs dd if=/dev/zero of=/mnt/test.dat bs=1M count=100
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Program received signal SIGUSR1, User defined signal 1.
0x00007ffff7386707 in kill () from /lib/x86_64-linux-gnu/libc.so.6


(gdb) next
Single stepping until exit from function kill,
which has no line number information.

Program terminated with signal SIGUSR1, User defined signal 1.
The program no longer exists.
(gdb) 

What I really want to do, is have some print statements in the file lib_commons.c and print some data out from there, but how do I do that when there are so many files combined in this open source program?

Thank you for your time,