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 [2018/10/07 00:11] – [Core File] Mention the suid_dumpable thing needed for core files to be generated on Linux when running sbbs with the setuid feature 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 (if no core file used):+B. Run Synchronet non-daemonized (if no core file used):
   (gdb) run -nd   (gdb) run -nd
  
 C. After segfault or other crash (or when using a core), display back-trace: C. After segfault or other crash (or when using a core), display back-trace:
   (gdb) bt   (gdb) bt
 +or (if more details are needed):
 +  (gdb) bt full
  
 D. If (and only if) the last line of the output looks like this: D. If (and only if) the last line of the output looks like this:
Line 74: Line 80:
  
 E. Copy and paste in e-mail to rob[at]synchro[dot]net or post in one of the Synchronet [[support|discussion groups]]. E. Copy and paste in e-mail to rob[at]synchro[dot]net or post in one of the Synchronet [[support|discussion groups]].
 +
 +**TIP:**\\
 +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
 +
 +==== 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 82: 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:|howto index]]+  * [[:howto:|How-To index]] 
 +  * [[https://wiki.debian.org/HowToGetABacktrace]]
  
 {{tag>debug unix linux gdb}} {{tag>debug unix linux gdb}}
  
howto/gdb.1538896270.txt · Last modified: 2018/10/07 00:11 by digital man
Back to top
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0