2016-10-20 8 views
0

GDBでCアプリケーション(postgres)をデバッグしています。私はブレークポイントにヒットすると、スタックの最上部のフレームは、常にソース情報を持っていますが、下のフレームはしばしばません。"read on demand"としてマークされたgdbソースをロードする

(gdb) bt 
#0 findTargetlistEntrySQL99 (pstate=0x555555ef8f78, node=0x555555ef8c08, tlist=0x555555ef90d0, exprKind=EXPR_KIND_GROUP_BY) at /home/sergei/postgresql/src/backend/parser/parse_clause.c:1775 
#1 0x00005555556c6e9d in findTargetlistEntrySQL92 (pstate=<optimized out>, node=<optimized out>, tlist=<optimized out>, exprKind=<optimized out>) at /home/sergei/postgresql/src/backend/parser/parse_clause.c:1744 
#2 0x00005555556c72d5 in transformGroupClauseExpr ([email protected]=0x7fffffffd0a0, [email protected]=0x0, [email protected]=0x555555ef8f78, [email protected]=0x555555ef8c08, [email protected]=0x555555ef90d0, [email protected]=0x0, exprKind=EXPR_KIND_GROUP_BY, useSQL99=0 '\000', toplevel=1 '\001') at /home/sergei/postgresql/src/backend/parser/parse_clause.c:1970 
#3 0x00005555556c9192 in transformGroupClause (pstate=0x555555ef8f78, grouplist=<optimized out>, groupingSets=0x555555ef90f0, targetlist=0x555555ef90d0, sortClause=0x0, exprKind=EXPR_KIND_GROUP_BY, useSQL99=0 '\000') at /home/sergei/postgresql/src/backend/parser/parse_clause.c:2287 
#4 0x00005555556aa111 in transformStmt() 
#5 0x00005555556abe6d in parse_analyze() 
#6 0x000055555574c50e in DefineView() 
#7 0x0000555555867bda in ProcessUtilitySlow.isra.4() 
#8 0x0000555555866a97 in standard_ProcessUtility() 
#9 0x0000555555864084 in PortalRunUtility() 
#10 0x0000555555864b95 in PortalRunMulti() 
#11 0x00005555558657a4 in PortalRun() 
#12 0x00005555558631f2 in exec_simple_query (query_string=0x555555ea6de0 "-- Statistics views\n\nCREATE VIEW pg_stat_all_tables AS\n SELECT\n", ' ' <repeats 12 times>, "C.oid AS relid,\n", ' ' <repeats 12 times>, "N.nspname AS schemaname,\n", ' ' <repeats 12 times>, "C.relname AS relname,\n", ' ' <repeats 12 times>, "pg_stat_get_numscans(C."...) at /home/sergei/postgresql/src/backend/tcop/postgres.c:1094 
#13 PostgresMain (argc=<optimized out>, argv=<optimized out>, dbname=<optimized out>, username=<optimized out>) at /home/sergei/postgresql/src/backend/tcop/postgres.c:4069 
#14 0x00005555555f719d in main() 

最初は、私は、GDBは、下部フレームのソースファイルを見つけることができなかった疑いがあります。しかし、これは当てはまりません。情報源はこれらのソースファイルを表示しますが、「オンデマンド読み取り」とマークされています。たとえば、フレーム6の関数DefineViewは、view.cで定義されています。

(gdb) info sources 
Source files for which symbols have been read in: 
    ... 
Source files for which symbols will be read in on demand: 
    ... , /home/sergei/postgresql/src/backend/commands/view.c , ... 

すべてのソースファイルパス(view.cを含む)は正しいです。 GDBにこれらのソースを読み込ませるにはどうしたらいいですか?私はIDEからGDBを使用していますので、一回限りの設定変更が必要なソリューションが優先されます。

答えて

1

コマンドラインオプションgdb --readnowは、gdbがシンボルファイルを検出したときにそれらを読み取らせるはずです。

+0

私にとっては、仕事をした--readnowではなく--readnowです。 –

関連する問題