猿问

如何在GDB具有命令行参数的情况下分析程序的核心转储文件?

如何在GDB具有命令行参数的情况下分析程序的核心转储文件?

我的程序运行如下:

exe -p param1 -i param2 -o param3

它崩溃并生成了一个核心转储文件core.pid

我想通过分析核心转储文件

gdb ./exe -p param1 -i param2 -o param3 core.pid

但是GDB将EXE文件的参数识别为GDB的输入。

在这种情况下如何分析核心转储文件?


扬帆大鱼
浏览 608回答 3
3回答

拉丁的传说

您可以通过多种方式将核心与gdb一起使用,但是将要传递给可执行文件的参数传递给gdb不是使用核心文件的方法。这也可能是你遇到这个错误的原因。您可以使用核心文件中以下几个方面:gdb <executable> <core-file>或gdb <executable> -c <core-file>或gdb&nbsp;<executable>...(gdb)&nbsp;core&nbsp;<core-file>使用核心文件时,您不必传递参数。崩溃场景显示在gdb中(使用Ubuntu上的gdb版本7.1进行检查)。例如:$&nbsp;./crash&nbsp;-p&nbsp;param1&nbsp;-o&nbsp;param2Segmentation&nbsp;fault&nbsp;(core&nbsp;dumped)$&nbsp;gdb&nbsp;./crash&nbsp;coreGNU&nbsp;gdb&nbsp;(GDB)&nbsp;7.1-ubuntu...Core&nbsp;was&nbsp;generated&nbsp;by&nbsp;`./crash&nbsp;-p&nbsp;param1&nbsp;-o&nbsp;param2'.&nbsp;<<<<<&nbsp;See&nbsp;this&nbsp;line&nbsp;shows&nbsp;crash&nbsp;scenarioProgram&nbsp;terminated&nbsp;with&nbsp;signal&nbsp;11,&nbsp;Segmentation&nbsp;fault.#0&nbsp;&nbsp;__strlen_ia32&nbsp;()&nbsp;at&nbsp;../sysdeps/i386/i686/multiarch/../../i586/strlen.S:9999&nbsp;&nbsp;../sysdeps/i386/i686/multiarch/../../i586/strlen.S:&nbsp;No&nbsp;such&nbsp;file&nbsp;or&nbsp;directory. &nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;../sysdeps/i386/i686/multiarch/../../i586/strlen.S(gdb)如果要将参数传递给要在gdb中调试的可执行文件使用--args。例如:$&nbsp;gdb&nbsp;--args&nbsp;./crash&nbsp;-p&nbsp;param1&nbsp;-o&nbsp;param2GNU&nbsp;gdb&nbsp;(GDB)&nbsp;7.1-ubuntu...(gdb)&nbsp;rStarting&nbsp;program:&nbsp;/home/@@@@/crash&nbsp;-p&nbsp;param1&nbsp;-o&nbsp;param2Program&nbsp;received&nbsp;signal&nbsp;SIGSEGV,&nbsp;Segmentation&nbsp;fault.__strlen_ia32&nbsp;()&nbsp;at&nbsp;../sysdeps/i386/i686/multiarch/../../i586/strlen.S:9999&nbsp;&nbsp;../sysdeps/i386/i686/multiarch/../../i586/strlen.S:&nbsp;No&nbsp;such&nbsp;file&nbsp;or&nbsp;directory. &nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;../sysdeps/i386/i686/multiarch/../../i586/strlen.S(gdb)手册页将有助于查看其他gdb选项。
随时随地看视频慕课网APP
我要回答