Showing posts with label cscope. Show all posts
Showing posts with label cscope. Show all posts

Wednesday, November 21, 2012

Using Cscope on large projects








      1 #!/usr/bin/env bash
      2
      3 CUR=`pwd`
      4 find $CUR -name "*" > $CUR/cscope.files
      5
      6 if [ ! -f "$CUR/cscope.files" ]; then
      7    echo "Not found cscope.files"
      8    exit 1
      9 fi
     10
     11 CSCOPE_DIR=`which cscope`
     12 if [ -z "$CSCOPE_DIR" -a x"$CSCOPE_DIR" = "x" ]; then
     13    echo "Not found cscope tool "
     14    exit 1
     15 fi
     16
     17 cscope -b -q -k
     18
     19 exit 0
     20




REF: http://cscope.sourceforge.net/large_projects.html
SourceForge Logo

Using Cscope on large projects (example: the Linux kernel)

Cscope can be a particularly useful tool if you need to wade into a large code base. You can save yourself a lot of time by being able to do fast, targeted searches rather than randomly grepping through the source files by hand (especially since grep starts to take a while with a truly large code base).In this tutorial you'll learn how to set up Cscope with a large project. We'll use as our example the Linux kernel source code, but the basic steps are the same for any other large project, including C++ or Java projects.
  1. Get the source. First get the source code. You can download the Linux kernel source from http://www.kernel.org. For the rest of this tutorial, I'll assume you've downloaded Linux 2.4.18 and installed it into /home/jru/linux-2.4.18.Note: Make sure you've got enough disk space: the kernel tarball alone is 30 MB, it expands into 150 MB of source code, and the Cscope database we'll generate will gobble up another 20-100+ MB (depending on how much of the kernel code you decide to include in the database). You can put the Cscope database on a different disk partition than the source code if you need to.
  2. Figure out where you want to put your Cscope database files. I'll assume you'll use /home/jru/cscope as the directory to store your database and associated files.
  3. Generate cscope.files with a list of files to be scanned. For some projects, you may want to include every C source file in the project's directories in your Cscope database. In that case you can skip this step, and just use 'cscope -R' in the project's top-level directory to build your Cscope database. But if there's some code that you wish to exclude, and/or your project contains C++ or Java source code (by default Cscope only parses files with the .c.h.y, or .l extensions), you'll need to generate a file called cscope.files, which should contain the name of all files that you wish to have Cscope scan (one file name per line).You'll probably want to use absolute paths (at least if you're planning to use the Cscope database within an editor), so that you can use the database from directories other than the one you create. The commands I show will first cd to root, so that find prints out absolute paths.
    For many projects, your find command may be as as simple as
        cd /
        find /my/project/dir -name '*.java' >/my/cscope/dir/cscope.files
        
    For the Linux kernel, it's a little trickier, since we want to exclude all the code in the docs and scripts directories, plus all of the architecture and assembly code for all chips except for the beloved Intel x86 (which I'm guessing is the architecture you're interested in). Additionally, I'm excluding all kernel driver code in this example (they more than double the amount of code to be parsed, which bloats the Cscope database, and they contain many duplicate definitions, which often makes searching harder. If you are interested in the driver code, omit the relevant line below, or modify it to print out only the driver files you're interested in):
        LNX=/home/jru/linux-2.4.18
        cd /  
        find  $LNX                                                                \
     -path "$LNX/arch/*" ! -path "$LNX/arch/i386*" -prune -o               \
     -path "$LNX/include/asm-*" ! -path "$LNX/include/asm-i386*" -prune -o \
     -path "$LNX/tmp*" -prune -o                                           \
     -path "$LNX/Documentation*" -prune -o                                 \
     -path "$LNX/scripts*" -prune -o                                       \
     -path "$LNX/drivers*" -prune -o                                       \
            -name "*.[chxsS]" -print >/home/jru/cscope/cscope.files
        
    While find commands can be a little tricky to write, for large projects they are much easier than editing a list of files manually, and you can also cut and paste a solution from someone else.
  4. Generate the Cscope database. Now it's time to generate the Cscope database:
        cd /home/jru/cscope     # the directory with 'cscope.files'
        cscope -b -q -k
        
    The -b flag tells Cscope to just build the database, and not launch the Cscope GUI. The -q causes an additional, 'inverted index' file to be created, which makes searches run much faster for large databases. Finally, -k sets Cscope's 'kernel' mode--it will not look in /usr/include for any header files that are #included in your source files (this is mainly useful when you are using Cscope with operating system and/or C library source code, as we are here).On my 900 MHz Pentium III system (with a standard IDE disk), parsing this subset of the Linux source takes only 12 seconds, and results in 3 files (cscope.outcscope.in.out, andcscope.po.out) that take up a total of 25 megabytes.
  5. Using the database. If you like to use vim or emacs/xemacs, I recommend that you learn how to run Cscope within one of these editors, which will allow you to run searches easily within your editor. We have a tutorial for Vim, and emacs users will of course be clever enough to figure everything out from the helpful comments in the cscope/contrib/xcscope/ directory of the Cscope distribution.Otherwise, you can use the standalone Cscope curses-based GUI, which lets you run searches, then launch your favorite editor (i.e., whatever $EDITOR is set to in your environment, or 'vi' by default) to open on the exact line of the search result.
    If you use the standalone Cscope browser, make sure to invoke it via
        cscope -d
        
    This tells Cscope not to regenerate the database. Otherwise you'll have to wait while Cscope checks for modified files, which can take a while for large projects, even when no files have changed. If you accidentally run 'cscope', without any flags, you will also cause the database to be recreated from scratch without the fast index or kernel modes being used, so you'll probably need to rerun your original cscope command above to correctly recreate the database.
  6. Regenerating the database when the source code changes.If there are new files in your project, rerun your 'find' command to update cscope.files if you're using it.
    Then simply invoke cscope the same way (and in the same directory) as you did to generate the database initially (i.e., cscope -b -q -k).


Tutorial by Jason DuellBack to the Cscope home page

Friday, May 7, 2010

vim with ctags










========================vimrc===========================

Folding

augroup vimrc
  au BufReadPre * setlocal foldmethod=indent
  au BufWinEnter * if &fdm == 'indent' | setlocal foldmethod=manual | endif
augroup END


Color scheme
:colorscheme koehler


" An example for a vimrc file.
"
" Maintainer:   Bram Moolenaar
" Last change:  2008 Jul 02
"
" To use it, copy it to
"     for Unix and OS/2:  ~/.vimrc
"             for Amiga:  s:.vimrc
"  for MS-DOS and Win32:  $VIM\_vimrc
"           for OpenVMS:  sys$login:.vimrc

:set wrap                                                 " Text wrapping
:set number                                             " Line numbering
:set mouse=a                                           " Mouse active
:set tabstop=3                                         " Tab as 4 spaces
:set expandtab                                         " All tabs are spaces
":set autoindent                                         " automatically indenting your code in structures like loops and procedures.
:set shiftwidth=4                                      " select a block of code and change its indentation level
:set shiftround                                          " indent/outdent to nearest tabstops
syntax on
set noswapfile
set nobackup
:set noai
:setlocal noautoindent
:setlocal nocindent
:setlocal nosmartindent

filetype plugin on

let Tlist_Ctags_Cmd = "/home/xviengu/bin/ctags"
let Tlist_WinWidth = 50
map :TlistToggle
:nnoremap :setl noai nocin nosi inde=

":set tags=~/vobs/HW/Project/tags
:set tags=./tags,tags,~/vobs/HW/Project/tags

" show matching brackets
autocmd FileType perl set showmatch


let perl_fold=1
let perl_fold_blocks=1

" Note, perl automatically sets foldmethod in the syntax file
autocmd Syntax c,cpp,cxx,vim,xml,html,xhtml setlocal foldmethod=syntax
autocmd Syntax c,cpp,cxx,vim,xml,html,xhtml,perl normal zR


" When started as "evim", evim.vim will already have done these settings.
if v:progname =~? "evim"
  finish
endif

" Use Vim settings, rather then Vi settings (much better!).
" This must be first, because it changes other options as a side effect.
set nocompatible

" allow backspacing over everything in insert mode
set backspace=indent,eol,start

if has("vms")
  set nobackup          " do not keep a backup file, use versions instead
else
  set backup            " keep a backup file
endif
set history=50          " keep 50 lines of command line history
set ruler               " show the cursor position all the time
set showcmd             " display incomplete commands
set incsearch           " do incremental searching

" For Win32 GUI: remove 't' flag from 'guioptions': no tearoff menu entries
" let &guioptions = substitute(&guioptions, "t", "", "g")

" Don't use Ex mode, use Q for formatting
map Q gq

" CTRL-U in insert mode deletes a lot.  Use CTRL-G u to first break undo,
" so that you can undo CTRL-U after inserting a line break.
inoremap u

" In many terminal emulators the mouse works just fine, thus enable it.
if has('mouse')
  set mouse=a
endif

" Switch syntax highlighting on, when the terminal has colors
" Also switch on highlighting the last used search pattern.
if &t_Co > 2 || has("gui_running")
  syntax on
  set hlsearch
endif

" Only do this part when compiled with support for autocommands.
if has("autocmd")

  " Enable file type detection.
  " Use the default filetype settings, so that mail gets 'tw' set to 72,
  " 'cindent' is on in C files, etc.
  " Also load indent files, to automatically do language-dependent indenting.
  filetype plugin indent on

  " Put these in an autocmd group, so that we can delete them easily.
  augroup vimrcEx
  au!

  " For all text files set 'textwidth' to 78 characters.
  autocmd FileType text setlocal textwidth=78

  " When editing a file, always jump to the last known cursor position.
  " Don't do it when the position is invalid or when inside an event handler
  " (happens when dropping a file on gvim).
  " Also don't do it when the mark is in the first line, that is the default
  " position when opening a file.
  autocmd BufReadPost *
    \ if line("'\"") > 1 && line("'\"") <= line("$") |
    \   exe "normal! g`\"" |
    \ endif

  augroup END

else

  set autoindent                " always set autoindenting on

endif " has("autocmd")

" Convenient command to see the difference between the current buffer and the
" file it was loaded from, thus the changes you made.
" Only define it when not defined already.
if !exists(":DiffOrig")
  command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis
                  \ | wincmd p | diffthis
endif

======================================================




ctags -R *

ctrl ]  ===> jump from function call to function definition
ctrl t  ===> go back
ctrl i and ctrl o ===> travel to forward and backward of the check points

refers the curses.h which is located at /usr/include/ by using symbolic link
ln -s /usr/include/curses.h curses.h

and run ctags -R * again

ref more, more (perl tag, sh tag)

ref vim, ctags more

How should I set up tag files for a multi-level directory hierarchy?

Taglist: Source Code Browser

Vim cmd: ctags, tags file, Moving through a program...













Thursday, April 8, 2010

build cmd




Programming in C
+ Marshall
umc:/vol/tmp/boot/liu.ini
/home/fhanka/Fnet/workIntOAM/umc_init_72.t

*.cc; *.h; *.c

cd /vobs/1bts_V1
cd /vobs/fw_V1

SIMENV for older release

View manager: vmgr &

serial -t 1bts70 liu
telnet 135.246.193.204 2002
serial -t 1bts71 liu
telnet 135.246.193.204 2018
serial -t 1bts72 liu
telnet 135.246.193.204 2026
serial 1bts78 liu

Labels