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来处理它?我有点挣扎(我仍在寻找使用你电话的方法)