2016-08-21 15 views
0

評価関数はありますか?私は「ヘルプ」を読んでいると私は、私はこの方法デバッガgdb評価式

How to grep on gdb printを使用してgrepをするために自分自身の関数を作成したいので、私はeval("gdb command")

を作りたい

を見つけるdidntの。

は私がeval($arg1)

答えて

1

evalコマンドがあるようにしたいが、それは本当にあなたがやりたいことはありません。これは、値をコマンドに置き換える限られた形式を提供します。

grepの行に沿ったコマンドについては、Pythonで書くことをお勧めします。これは比較的簡単に行うことができます。考え方はgdb.executeを使用してコマンドの出力を文字列に取り込み、Pythonを使用して文字列を検索します。 Pythonからコマンドラインを解析する方法を完全に制御できますが、gdb defineコマンドを使用するとそうではありません。

1

奇妙なことに、私は今日別のquestionのgrep python gdb関数を書いています。これらのファイルは、コールスタックに_mallocが含まれているかどうかをチェックする新しいコマンドを作成します。これは、他の文字列検索や評価関数にとってはかなり良いスタートになるはずです。

#!/usr/bin/python 
# gdb will 'recognize' this as python 
# upon 'source pygdb-logg.py' 
# however, from gdb functions still have 
# to be called like: 
# (gdb) python print logExecCapture("bt") 

import sys 
import gdb 
import os 

def logExecCapture(instr): 
    # /dev/shm - save file in RAM 
    ltxname="/dev/shm/c.log" 

    gdb.execute("set logging file "+ltxname) # lpfname 
    gdb.execute("set logging redirect on") 
    gdb.execute("set logging overwrite on") 
    gdb.execute("set logging on") 
    gdb.execute("bt") 
    gdb.execute("set logging off") 

    replyContents = open(ltxname, 'r').read() # read entire file 
    return replyContents 

# in malloc? 
def inMalloc(): 
    isInMalloc = -1; 
    # as long as we don't find "Breakpoint" in report: 
    while isInMalloc == -1: 
    REP=logExecCapture("n") 
#Look for calls that have '_malloc' in them 
    isInMalloc = REP.find("_malloc") 
    if(isInMalloc != -1): 
#  print ("Malloc:: ", isInMalloc, "\n", REP) 
     gdb.execute("set $inMalloc=1") 
     return True 
    else: 
#  print ("No Malloc:: ", isInMalloc, "\n", REP) 
     gdb.execute("set $inMalloc=0") 
     return False 
:ここ

は、GDBここ

# gdb script: pygdb-logg.gdb 
# easier interface for pygdb-logg.py stuff 
# from within gdb: (gdb) source -v pygdb-logg.gdb 
# from cdmline: gdb -x pygdb-logg.gdb -se test.exe 

# first, "include" the python file: 
source -v pygdb-logg.py 

# define shorthand for inMalloc(): 
define inMalloc 
    python inMalloc() 
end 

ためのスクリプトはPythonのファイルであります