Shell 使用strace调试执行查询的db2 CLI

Shell 使用strace调试执行查询的db2 CLI,shell,db2,strace,db2-luw,Shell,Db2,Strace,Db2 Luw,我想使用strace调试我在db2中的一个奇怪行为。我在C中实现了一个SQL函数myFoo(),由于某种原因(某些代码访问路径不存在或未授权,请参阅)。我的Sql函数在/usr/local/lib/libmyfoo中的共享库中调用函数Foo(因此在db2术语/usr/local/lib/libmyfoo!Foo) 如果我直接在db2中使用strace,那么查询中会出现一个错误 A database connection does not exist 因此,我用以下代码创建了一个脚本调用d

我想使用
strace
调试我在
db2
中的一个奇怪行为。我在
C
中实现了一个SQL函数
myFoo()
,由于某种原因(某些代码访问路径不存在或未授权,请参阅)。我的Sql函数在
/usr/local/lib/libmyfoo
中的共享库中调用函数
Foo
(因此在db2术语
/usr/local/lib/libmyfoo!Foo

如果我直接在db2中使用
strace
,那么查询中会出现一个错误

   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


这真的是你定义函数的方式吗<代码>libmyfoo!Foo将指向库
$INSTANCE\u HOME/sqllib/function/libmyfoo
。如果你的库在其他地方,你需要提供它的绝对路径。

我不认为
strace
ing客户端将帮助你调试服务器。
ls-l/usr/local/lib/libmyfoo
的输出是什么(请停止使用假名称,没有人会通过知道实际的文件名来窃取你的知识产权).我已经更新了帖子。我用正确的方法重新切割路径。对不起,我的帖子不够准确。嗨,安哥卡。谢谢你的帮助。我可以看到分配给$VALUE的结果,但如何使用strace来处理它?我有点挣扎(我仍在寻找使用你电话的方法)