使用strace调试执行查询的db2CLI



我想使用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_。如果你的库在其他地方,你需要提供它的绝对路径。

最新更新