我想使用strace
来调试db2
的一个奇怪行为。我有一个在C
中实现的SQL函数myFoo()
,由于某种原因(某些代码访问路径不存在或未授权,请参阅此处),它没有被调用。我的Sql函数调用/usr/local/lib/libmyfoo
中共享库中的函数Foo
(在db2术语/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
您可能在不同的子shell中调用每个DB2命令。你可以通过在一个子shell中执行所有内容来解决这个问题,例如
VALUE=$(. /home/db2inst1/sqllib/db2profile ; db2 connect to MYDB ; db2 "select * from table(myFoo())")
我的Sql函数调用
/usr/local/lib/libmyfoo
中共享库中的函数Foo(在db2术语libmyfoo!Foo
中也是如此)。
你真的是这样定义你的函数的吗?CCD_ 12将指向库CCD_。如果你的库在其他地方,你需要提供它的绝对路径。