Code seems to make an abnormal call... I think:


I include the first part to show that you need to cd to the source code 
directory for gdb to show you source lines.



root@kibar:~# gdb pgrep

GNU gdb (Debian 10.1-1.7+hurd.1) 10.1.90.20210103-git

Copyright (C) 2021 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 extent permitted by law.

Type "show copying" and "show warranty" for details.

This GDB was configured as "i686-gnu".

Type "show configuration" for configuration details.

For bug reporting instructions, please see:

<https://www.gnu.org/software/gdb/bugs/>.

Find the GDB manual and other documentation resources online at:

    <http://www.gnu.org/software/gdb/documentation/>.



For help, type "help".

Type "apropos word" to search for commands related to "word"...

Reading symbols from pgrep...

Reading symbols from 
/usr/lib/debug/.build-id/9d/db1b82ac5d2dbcf3848a674d389138555fce77.debug...

(gdb) l

907     pgrep.c: No such file or directory.

(gdb) q

root@kibar:~# ls

procps-3.3.16                  procps_3.3.16-5.dsc

procps_3.3.16-5.debian.tar.xz  procps_3.3.16.orig.tar.xz

root@kibar:~# cd procps-3.3.16/

root@kibar:~/procps-3.3.16# ls

AUTHORS            free.1       pgrep.1   ps         sysctl.c          vmstat.8

autogen.sh         free.c       pgrep.c   pwdx.1     sysctl.conf       vmstat.c

ChangeLog          include      pidof.1   pwdx.c     sysctl.conf.5     w.1

configure.ac       INSTALL.md   pidof.c   README.md  testsuite         watch.1

contrib            kill.1       pkill.1   skill.1    tload.1           watch.c

COPYING            lib          pmap.1    skill.c    tload.c           w.c

COPYING.LIB        Makefile.am  pmap.c    slabtop.1  top

create-man-pot.sh  man-po       po        slabtop.c  translate-man.sh

debian             misc         proc      snice.1    uptime.1

Documentation      NEWS         procio.c  sysctl.8   uptime.c

root@kibar:~/procps-3.3.16# gdb pgrep

GNU gdb (Debian 10.1-1.7+hurd.1) 10.1.90.20210103-git

Copyright (C) 2021 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 extent permitted by law.

Type "show copying" and "show warranty" for details.

This GDB was configured as "i686-gnu".

Type "show configuration" for configuration details.

For bug reporting instructions, please see:

<https://www.gnu.org/software/gdb/bugs/>.

Find the GDB manual and other documentation resources online at:

    <http://www.gnu.org/software/gdb/documentation/>.



For help, type "help".

Type "apropos word" to search for commands related to "word"...

Reading symbols from pgrep...

Reading symbols from 
/usr/lib/debug/.build-id/9d/db1b82ac5d2dbcf3848a674d389138555fce77.debug...

(gdb) set args testany

(gdb) l main

916                                          program_invocation_short_name);

917     }

918     

919     

920     int main (int argc, char **argv)

921     {

922             struct el *procs;

923             int num;

924     

925     #ifdef HAVE_PROGRAM_INVOCATION_NAME

(gdb) l 925

920     int main (int argc, char **argv)

921     {

922             struct el *procs;

923             int num;

924     

925     #ifdef HAVE_PROGRAM_INVOCATION_NAME

926             program_invocation_name = program_invocation_short_name;

927     #endif

928             setlocale (LC_ALL, "");

929             bindtextdomain(PACKAGE, LOCALEDIR);

(gdb) break 928

Breakpoint 1 at 0x11a5: file pgrep.c, line 928.

(gdb) run

Starting program: /usr/bin/pgrep testany

[New Thread 8553.5]



Thread 4 hit Breakpoint 1, main (argc=2, argv=0x1032e24) at pgrep.c:928

928             setlocale (LC_ALL, "");

(gdb) s

929             bindtextdomain(PACKAGE, LOCALEDIR);

(gdb) s

930             textdomain(PACKAGE);

(gdb) s

931             atexit(close_stdout);

(gdb) s

933             parse_opts (argc, argv);

(gdb) s

parse_opts (argv=0x1032e24, argc=2) at pgrep.c:690

690             char opts[64] = "";

(gdb) s

730             if (strstr (program_invocation_short_name, "pkill")) {

(gdb) s

main (argc=2, argv=0x1032e24) at pgrep.c:933

933             parse_opts (argc, argv);

(gdb) s

parse_opts (argv=0x1032e24, argc=2) at pgrep.c:740

740                     strcat (opts, "lad:vw");

(gdb) s

strcat (__src=0x803592d "lad:vw", __dest=0x1032d3c "")

    at /usr/include/i386-gnu/bits/string_fortified.h:128

warning: Source file is more recent than executable.

128       return __builtin___strcat_chk (__dest, __src, __bos (__dest));

(gdb) s

743             strcat (opts, "LF:cfinoxP:g:s:u:U:G:t:r:?Vh");

(gdb) s

0x0803331b in strcat (__src=0x8035934 "LF:cfinoxP:g:s:u:U:G:t:r:?Vh", 

    __dest=0x1032d3c "lad:vw")

    at /usr/include/i386-gnu/bits/string_fortified.h:128

128       return __builtin___strcat_chk (__dest, __src, __bos (__dest));

(gdb) s

743             strcat (opts, "LF:cfinoxP:g:s:u:U:G:t:r:?Vh");

(gdb) s

0x08033335 in strcat (__src=0x8035934 "LF:cfinoxP:g:s:u:U:G:t:r:?Vh", 

    __dest=0x1032d3c "lad:vwLF:cfinoxP:g:s:u:U:G:t:r:?Vh")

    at /usr/include/i386-gnu/bits/string_fortified.h:128

128       return __builtin___strcat_chk (__dest, __src, __bos (__dest));

(gdb) s

745             while ((opt = getopt_long (argc, argv, opts, longopts, NULL)) 
!= -1) {

(gdb) s

894             if(opt_lock && !opt_pidfile)

(gdb) s

899             if(opt_pidfile){

(gdb) s

907             if (argc - optind == 1)

(gdb) s

908                     opt_pattern = argv[optind];

(gdb) s

main (argc=<optimized out>, argv=<optimized out>) at pgrep.c:935

935             procs = select_procs (&num);

(gdb) s

select_procs (num=0x1032c94) at pgrep.c:489

489     {

(gdb) s

498             pid_t myself = getpid();

(gdb) s

500             long cmdlen = sysconf(_SC_ARG_MAX) * sizeof(char);

(gdb) s

506             ptp = do_openproc();

(gdb) s

0x0803474d in do_openproc () at pgrep.c:434

434                     flags |= PROC_FILLCOM;

(gdb) s

xmalloc (size=4294967295) at ./include/xalloc.h:25

25              void *ret = malloc(size);

(gdb) 



from cat -n pgrep.c:

  428  static PROCTAB *do_openproc (void)

   429  {

   430          PROCTAB *ptp;

   431          int flags = 0;

   432  

   433          if (opt_pattern || opt_full || opt_longlong)

   434                  flags |= PROC_FILLCOM;

   435          if (opt_ruid || opt_rgid)

   436                  flags |= PROC_FILLSTATUS;

   437          if (opt_oldest || opt_newest || opt_pgrp || opt_sid || opt_term)

   438                  flags |= PROC_FILLSTAT;

Reply via email to