PRODDIR ... $SP_SYS_PRODDIR の値 に置き換えてお読みください
VARDIR ... $SP_SYS_VARDIR の値 に置き換えてお読みください
 
以下 gdb を使用した際の実行例です。
< 実行例 >
# cd VARDIR/dump
# gdb PRODDIR/.app-modules/sp_ocap core.XXXXX
(gdb)  bt
... << スタックトレースが出力されます。
(gdb) quit
上記 sp_ocap の箇所は、Core Dump したプログラムを指定してください。
主なプロセスのファイル名
( PRODDIR/.app-modules/)
Capture   sp_ocap 
Reader sp_ordr
Export sp_xport
Import sp_mport
Post   sp_opst_mt
 
Linux  /  RedHat Enterprise Linux における注意点
RedHat Enterprise Linux ( 以後RHEL )では システムおよびCOP (sp_cop) 起動時の環境にてulimitの core file size が0に制限されていないことをご確認ください(ulimit -aやulimit -cで確認 )。
また、RHEL7以上では以下のようなログがあってもsystemdが指定した場所へ保存されていることがあります。
Error    2025-10-20 07:50:21.360647 10976 223570880 Poster killed due to SIGSEGV, core file = VARDIR/dump/core.PID was not generated, pid = PID  (posting from o.opdbnet, queue kno819mt0, to o.opdbnet)
コアファイルの保存先 /var/lib/systemd/coredump/
ファイル名 core.<ProcName>.<UID_of_splexUser>.<Boot_ID>.<ProcessPID>.<UnixTime>000000.zst 
 
【注意】 coredumpctl を使う方法では /var/lib/systemd/coredump/ に配置されており、rootユーザーで実行する必要があります。
 
1. コアファイル一覧を出力 
 coredumpctl list で一覧とクラッシュ時のPIDを確認して、coredump debug PIDなどの指定でgdbを起動します。
# coredumpctl list
例
[root@kno9019 coredump]# coredumpctl list
TIME                          PID   UID   GID SIG     COREFILE EXE                                             SIZE
Wed 2025-10-01 05:55:53 UTC 11447 54323 54327 SIGSEGV present  PRODDIR/.app-modules/sp_opst_mt 1.2M
Wed 2025-10-01 06:57:55 UTC 16774 54323 54327 SIGSEGV present  PRODDIR/.app-modules/sp_opst_mt 1.2M
2. coredumpctlでcoreファイルを使用してGDBを起動
 
# coredumpctl debug MATCHESキーワード を指定
例 (PID)
coredumpctl  debug 11447
# coredumpctl debug 11447
           PID: 11447 (sp_opst_mt)
           UID: 54323 (splex114)
           GID: 54327 (spadmin)
        Signal: 11 (SEGV)
     Timestamp: Wed 2025-10-01 05:55:52 UTC (2h 46min ago)
  Command Line: PRODDIR/.app-modules/sp_opst_mt
... 
--Type <RET> for more, q to quit, c to continue without paging--
リターンキーを押してページャ―モードが終了してgdbプロンプトを待つ
(gdb)
3. backtraceを実行
(gdb) bt 
例 
(gdb) bt
#0  0x00007f2d2d2728ad in select () from /lib64/libc.so.6
#1  0x000055bdb2b07017 in wait_for_udp (usec=usec@entry=100) at ../src/opst_mt/sp_opst_mt.cpp:517
#2  0x000055bdb2b07e10 in q_wait (usec=-1) at ../src/opst_mt/sp_opst_mt.cpp:1368
#3  q_read (new_mlen=new_mlen@entry=0x7ffe5d6847c0, rmsg=0x55bdb2cd20c0 <rmsg>) at ../src/opst_mt/sp_opst_mt.cpp:1551
#4  0x000055bdb2b0a7c1 in ReadOrSkipQue (rmsg=0x55bdb2cd20c0 <rmsg>, new_mlen=0x7ffe5d6847c0) at ../src/opst_mt/sp_opst_mt.cpp:1615
#5  main_loop () at ../src/opst_mt/sp_opst_mt.cpp:2008
#6  app_main (argc=argc@entry=1, argv=argv@entry=0x7ffe5d686458) at ../src/opst_mt/sp_opst_mt.cpp:2735
#7  0x000055bdb2b057b1 in main (argc=1, argv=0x7ffe5d686458) at ../src/opst_mt/app.cpp:38
4.gdb/coredumpctl 終了
(gdb) q 
2から4までの手順のターミナル出力を採取します。
 
【gdbから直接実行する方法】
/var/lib/systemd/coredump/core..zst をSharePlex OS ユーザー でバックトレースするには
コアファイルcore......zstをSharePlexが利用可能な任意の場所にコピー、zstdコマンドで解凍し、ファイルのオーナーを変更して手動でgdb実行します。
 
例: 
この例ではPost(sp_opst_mt)が吐いたcoreのスタックトレースを採取します。
1. coreファイルをSharePlexユーザーが利用可能な場所へコピーする
# cp /var/lib/systemd/coredump/core.sp_opst_mt.aaa.zst /home/splex/core.sp_opst_mt.aaa.zst
 
2. zstファイルをを解凍する
# zstd -d core.sp_opst_mt.aaa.zst   
 
3. オーナーをSharePlex OSユーザーへ変更する
# chown splex core.sp_opst_mt.aaa
 
4. SharePlex OSユーザーでgdb実行 
splex $ gdb  PRODDIR/.app-modules/sp_opst_mt   /home/splex/core.sp_opst_mt.aaa
(gdb) が出てくるまでリターンキー
(gdb) bt
バックトレース実行。ここまでのターミナル出力を回収
(gdb) q  
終了