Запустите скрипт, используя DBX - PullRequest
0 голосов
/ 27 сентября 2011

У меня есть такой скрипт script = GF1_dd_Daemon_Sh PROCESS_NAME = RG INSTANCE = RG PART_ID = 1

Внутри этого есть исполняемый файл, который называется. Когда я запускаю этот скрипт ( #! / Bin / ksh ), он создает дамп ядра и использует dbx, когда я анализирую трассировку стека, я не могу получить много информации.

Есть ли способ запустить сценарий с использованием DBX и отследить точку, в которой исполняемый файл создает дамп ядра.

Я использую SOLARIS.

Спасибо.

Трассировка стека

  (dbx) where
    current thread: t@1
      [1] xercesc_2_6::SAXParser::SAXParser(0xffffffff70b833b8, 0xffffffff70b83480, 0x0, 0x0, 0xffffffff70b833f8, 0xffffffff7d12ccd8), at 0xffffffff7ce22fc0
    =>[2] __SLIP.INIT_D() (optimized), at 0xffffffff70a447b8 (line ~35) in "Parser.h"
      [3] __STATIC_CONSTRUCTOR() (optimized), at 0xffffffff70a46f04 (line ~35) in "Parser.h"
      [4] 0xffffffff70a74718(0xffffffff7f7361b8, 0xffffffff7f738d60, 0x11a340, 0x0, 0xffffffff7f736c60, 0x821), at 0xffffffff70a74718
      [5] call_init(0xffffffff7f736530, 0x1, 0xffffffff70a74618, 0xffdfffff, 0xffffffff7f736c60, 0xffffffffffffffff), at 0xffffffff7f618674
      [6] dlmopen_intn(0xffffffff7ffe6b0c, 0x8, 0x4a, 0x52, 0xffffffff7ffe6b0c, 0xffffffff77800a60), at 0xffffffff7f61df7c
      [7] dlmopen_check(0xffffffff7f7361b8, 0xffffffff7ffe6c18, 0x1, 0xffffffff7f400ef0, 0xffffffff7ffe6b0c, 0x118cc8), at 0xffffffff7f61e0f0
      [8] _dlopen(0xffffffff7ffe6c18, 0x1, 0x1, 0xffffffff7ea56d30, 0x11, 0xffffffff7fffc226), at 0xffffffff7f61e130
      [9] GMF_sfg_ACTIVITY(i_pgmName = ???, i_instance = ???, i_coreReplaceRegister_func_p = ???) (optimized), at 0xffffffff7e926ff0 (line ~200) in "GMF_sfg_ACTIVITY.c"
      [10] GMF_mdg_EXECinit(i_pcProcessName = ???, i_argc = ???, i_argv = ???) (optimized), at 0xffffffff7eb33394 (line ~556) in "GMF_mdg_EXECinit.c"
      [11] GMF_mdg_EXECmain(argc = ???, argv = ???) (optimized), at 0xffffffff7eb25ae8 (line ~163) in "GMF_mdg_EXECfunc.c"
      [12] main(argc = ???, argv = ???) (optimized), at 0x100001eb8 (line ~52) in "GMF_mdg_EXECproc.c"
    (dbx) down
    0xffffffff7ce22fc0: SAXParser+0x0110:   ldx      [%i2], %o3

Ответы [ 2 ]

0 голосов
/ 27 сентября 2011

Один из распространенных подходов - добавить в скрипт переменную с именем $ DEBUGGER

#!/bin/sh
echo "this is the script"
$DEBUGGER the_executable arg1 arg2

Если для переменной окружения DEBUGGER задано значение "dbx", то при запуске сценария dbx будет запущен и даст вам приглашение dbx.

Если вы используете IDE Solaris Studio, вы можете использовать "ss_attach" вместо "dbx", и он присоединит сеанс отладки к IDE, которая уже запущена.

Проверьте справочную страницу ss_attach.

0 голосов
/ 27 сентября 2011
  1. Внутри скрипта проверьте, какие аргументы передаются в исполняемый файл (двоичный файл).
  2. запускайте dbx с этим исполняемым файлом
  3. после его запуска установите аргументы, которыеВы обнаружили на шаге 1
  4. останов в GMF_mdg_EXECmain
  5. , затем начните проверку потока кода
...