0

我想用它strace来调试一个奇怪的行为db2。我有一个myFoo()实现的 SQL 函数C,由于某种原因没有被调用(某些代码访问路径不存在或未经授权,请参见此处)。My Sql Function 调用Foo共享库中的函数/usr/local/lib/libmyfoo(所以在 db2 term 中/usr/local/lib/libmyfoo!Foo)。

如果我strace直接使用 db2 和查询我有一个错误说

   A database connection does not exist

所以我用以下内容创建了一个脚本调用debug.sh。这个想法是让一个 db2 连接处于活动状态的 shell 并对其进行跟踪。

db2 "connect to MYDB"
db2 "select * from table(myFoo())" # this calls /usr/local/lib/libmyfoo!Foo
db2 "disconnect MYDB"

它不起作用,因为我意识到 strace 与二进制文件一起工作,所以我有错误

Exec Format Error
4

2 回答 2

1

可能您在不同的子shell 中调用每个DB2 命令。例如,您可以通过仅在一个子 shell 中执行所有内容来解决该问题

VALUE=$(. /home/db2inst1/sqllib/db2profile ; db2 connect to MYDB ; db2 "select * from table(myFoo())")
于 2013-12-02T14:44:19.640 回答
0

我的 Sql 函数在共享库中调用函数 Foo /usr/local/lib/libmyfoo(所以在 db2 term 中libmyfoo!Foo)。

这真的是您定义功能的方式吗?libmyfoo!Foo将指向库$INSTANCE_HOME/sqllib/function/libmyfoo。如果您的库在其他地方,您需要提供它的绝对路径。

于 2013-12-02T14:54:01.530 回答