Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
howto:gdb [2019/05/07 15:13] – [Debugging] It's supposed to be -ex and --args <sigh> - so much for consistency digital manhowto:gdb [2023/02/08 23:47] (current) – Use pidof instead pgrep digital man
Line 36: Line 36:
      
 :!: **Linux Sysops**:\\ :!: **Linux Sysops**:\\
-To help locate sbbs crash core files, adding the following lines in your ''/etc/sysctl.conf'' file can be helpful:+To help locate sbbs crash core files, adding the following lines in your ''/etc/sysctl.conf'' or ''/etc/sysctl.d/sysctl.local.conf'' file can be helpful:
  
   # Controls whether core dumps will append the PID to the core filename.   # Controls whether core dumps will append the PID to the core filename.
Line 45: Line 45:
 This will place core files with the name ''core.sbbs.####'' in the ''/tmp'' directory This will place core files with the name ''core.sbbs.####'' in the ''/tmp'' directory
 instead of ''core.####'' in the current directory (typically ''/sbbs/ctrl''). instead of ''core.####'' in the current directory (typically ''/sbbs/ctrl'').
 +To reload the modified sysctl configuration files, run
 +  $ /sbin/sysctl --system
  
 Also, if you're using the ''setuid'' feature of sbbs (e.g. starts as //root// but changes to a different user after binding ports), then you may need to add the following line to your ''/etc/sysctl.conf'' file: Also, if you're using the ''setuid'' feature of sbbs (e.g. starts as //root// but changes to a different user after binding ports), then you may need to add the following line to your ''/etc/sysctl.conf'' file:
Line 50: Line 52:
      
 You can also set ''suid_dumpable'' immediately and temporarily with the following command: You can also set ''suid_dumpable'' immediately and temporarily with the following command:
-  echo 2 > /proc/sys/fs/suid_dumpable+  echo 2 > /proc/sys/fs/suid_dumpable
      
  
Line 59: Line 61:
 or (if debugging with a core file): or (if debugging with a core file):
   # gdb /sbbs/exec/sbbs /tmp/core.sbbs.####   # gdb /sbbs/exec/sbbs /tmp/core.sbbs.####
-or (if attaching to an existing running instance, read the pid from ''/var/run/sbbs.pid''):+or (if attaching to an existing running instance, reading the PID from ''/var/run/sbbs.pid''):
   # gdb /sbbs/exec/sbbs <pid>   # gdb /sbbs/exec/sbbs <pid>
 +or (if attaching to an existing running instance, using ''pidof'' to determine the PID):
 +  # gdb -p $(pidof sbbs)
  
 B. Run Synchronet non-daemonized (if no core file used): B. Run Synchronet non-daemonized (if no core file used):
Line 80: Line 84:
 To run Synchronet (non-daemonized) directly from the GNU debugger without having to type "run" at a ''(gdb)'' prompt: To run Synchronet (non-daemonized) directly from the GNU debugger without having to type "run" at a ''(gdb)'' prompt:
   # gdb -ex run --args sbbs -nd   # gdb -ex run --args sbbs -nd
 +
 +==== Root Access ====
 +
 +If the ''sbbs'' process was started as root, you may need root privileges to attached with ''gdb'':
 +
 +  Attaching to process 21848
 +  ptrace: Operation not permitted.
 +  (gdb)
 +  
 +If you get this error, try attaching again as root (e.g. run with ''sudo gdb'').
  
 ==== Handling SIGPIPE ==== ==== Handling SIGPIPE ====
Line 88: Line 102:
 Alternatively, you can add the following line to your ''~/.gdbinit'' file or ''/etc/gdb/gdbinit'': Alternatively, you can add the following line to your ''~/.gdbinit'' file or ''/etc/gdb/gdbinit'':
   handle SIGPIPE nostop noprint pass   handle SIGPIPE nostop noprint pass
 +  
 +===== Thread Snapshot =====
 +
 +To attach to a running sbbs process and quickly collect a snapshot of backtraces from all running threads (remember, obtain root privileges first, e.g. with ''sudo'', if necessary):
 +  $ gdb -p $(pidof sbbs) -batch -ex "thread apply all bt" -ex quit > sbbs_threads.txt
  
 ===== See Also ===== ===== See Also =====
howto/gdb.1557267236.txt · Last modified: 2019/05/07 15:13 by digital man
Back to top
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0