Java JNCDLL调试如何?

Java JNCDLL调试如何?,java,c,dll,jna,Java,C,Dll,Jna,我有一个DLL,它接受编码字符串输入并对其进行解码。DLL是在Win7 64位上使用Codeblocks和mingw64创建的。C代码本身运行良好,但当我在while循环中使用相同的字符串通过JNA运行它时,大约70%的调用正确解码,其余调用则错误解码。我想调试这种情况,但在Java代码将控制权交给JNA之后,我不确定如何进行调试。或者,关于在哪里寻找的任何想法也会有所帮助 C和JNA中的方法签名如下: Java: int Decrypt_Blk(byte[] expkey, byte[] in

我有一个DLL,它接受编码字符串输入并对其进行解码。DLL是在Win7 64位上使用Codeblocks和mingw64创建的。C代码本身运行良好,但当我在while循环中使用相同的字符串通过JNA运行它时,大约70%的调用正确解码,其余调用则错误解码。我想调试这种情况,但在Java代码将控制权交给JNA之后,我不确定如何进行调试。或者,关于在哪里寻找的任何想法也会有所帮助

C和JNA中的方法签名如下:

Java: int Decrypt_Blk(byte[] expkey, byte[] in, int size, byte[] out);  
C: __declspec (dllexport) int Decrypt_Blk (unsigned char *expkey, unsigned char *in, unsigned int insize, unsigned char *out);

正确性由输出决定,例如,如果我使用字符串“helloworld”对其进行加密(我不会进入加密细节,因为它们是无关的),然后将加密的输出传递给此DLL方法,10次中有7次我得到“helloworld”,另外3次我会得到不正确和变化的字符。10次我都在同一个线程中,使用同一个变量,在同一个循环中。3次错误的出现也是随机的,我唯一能注意到的是,第一次运行总是正确的,正如我测试过的次数一样,但错误的运行发生在1-10次运行中的任何一次

>微软Visual C++,从DLL项目的项目设置中,可以选择调试选项卡。作为调试会话的可执行文件,提供Java.exe的完整路径。对于参数,请提供命令行的其余部分以运行Java应用程序。在C代码中设置断点并启动调试会话。瞧

您如何确定操作的“正确性”?首先要查找的是输入和输出中无符号和有符号之间的转换错误。请注意,您的API正在对
expkey
数据的格式以及
out
缓冲区的大小进行假设。感谢@technomage,out的大小至少在目前的测试中是固定的,但这些假设在运行时会有所不同吗?它70%的时间运行良好。不过,我将尝试使用ByteBuffer而不是byte[],以避免任何与大小相关的问题。再次感谢。任何输出缓冲区的大小都应该指示给被调用的函数,这样它就可以避免任何重写它的机会。这种缓冲区覆盖是许多安全漏洞的根源(更不用说间歇性程序崩溃)。