请教关于JIT调试

alikwok 2004-03-15 07:25:25
我所定的程序在VB.NET的调试模式及BIN目录下均能正常运行,但把BIN内的文件拷到本机别的目录下运行时出现如下错误提示:

"
有关调用实时 (JIT) 调试而不是此对话框的详细信息,
请参阅此消息的结尾。

************** 异常文本 **************
System.ArgumentOutOfRangeException: 长度不能小于 0。
参数名:length
at System.String.Substring(Int32 startIndex, Int32 length)
at System.String.Substring(Int32 startIndex)

。。。。

************** JIT 调试 **************
若要启用实时 (JIT) 调试,此
应用程序或计算机的配置文件 (machine.config) 的
system.windows.forms 节中必须设置 jitDebugging 值。
编译应用程序时还必须启用
调试。

例如:

<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

启用 JIT 调试后,任何未处理的异常
将被发送到此计算机上注册的 JIT 调试器,
而不是由此对话框处理。

"
请高手们给点意见帮忙解决,谢谢
...全文
1546 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
alikwok 2004-04-08
  • 打赏
  • 举报
回复
to mainone(现代)

谢谢你的大力帮忙,现对程序启动的故障原因有点眉目啦(还在查原因中)
mainone 2004-04-03
  • 打赏
  • 举报
回复
strResult 是否返回值了,你跟以下你的程序,看你从INI文件中读的是否读回来了,如果你 确认你读回的数据没有错误,那就是你的处理数据的算法有问题,

如果你认为还是没有问题,那你把你的读的ini的内容,和你要达到的效果发给我,我给你试试

wangyang@maione.com.cn
static504 2004-04-03
  • 打赏
  • 举报
回复
免费使用
免费升级

超越水晶报表,是我们的目标
彻底解除程序员负担,极大提高用户设定灵活性
LLanV报表工具,经过了10000行以上数据的压力测试,性能优良!

其中一部分功能如下:
1.支持资料卡(比如:个人简历),表单(比如:销售定单),报表(比如:销售月报表)的预览打印
2.不用任何设定,就可以默认产生专业的页面
3.用户可以一次性设定企业标准样式(比如:公司标志,台头)
4.支持文本,线条,方框,图片,等报表元素
5.对各报表元素和报表区域等提供丰富的属性
6.用户可以在运行期间编辑文本,线条,方框,图片,明细列, 操作简单
7.支持同一列相同数据合并成一个格
8.可以在运行期间增删,调换明细列
9.提供多种报表风格
10.支持页合计,总计
11.支持的套打报表
12.支持MIS开发的各种开发工具:如VC、VB、Delphi等
13.可以直接连接数据库
14.用户可以把设定后的报表样式保存为报表样式文件
15.报表头和报表尾均可多于一页
16.报表样式文件格式完全开放
17.可以实现中国式复杂报表样式
18.无须编程

请发EMAIL给LLanSoft@21cn.com
alikwok 2004-04-03
  • 打赏
  • 举报
回复
to mainone(现代)

按你所说的把API的定义改了,再把读取的函数改成下面那样,结果依久(T_T),是否我还有什么地方弄错了?

Public Function GetValue_Str(ByVal SectionName As String, ByVal KeyWord As String, ByVal DefString As String) As String

Dim strResult As New System.Text.StringBuilder(225), intTmpCnt As Integer
Dim strCharact As String, intCnt As Integer
intTmpCnt = GetPrivateProfileString(SectionName, KeyWord, "", strResult, 255, strIniFlName)

If intTmpCnt > 0 Then '关键词的值不为空
strCharact = ""
For intCnt = 1 To strResult.ToString.Length
If Asc(Mid(strResult.ToString, intCnt, 1)) = 0 Then
Exit For
Else
strCharact = strCharact & Mid(strResult.ToString, intCnt, 1)
End If
Next
Else
strCharact = DefString
End If
Return strCharact
End Function
alikwok 2004-04-02
  • 打赏
  • 举报
回复
改成这样吗?(还是有语法错误T_T),另外就是我所用的是VB.NET英文版的,跟这个有关吗?

Private Declare Function GetPrivateProfileString Lib "kernel32" "GetPrivateProfileString" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Int32, ByVal lpFileName As String) As int32

Private Declare Function GetPrivateProfileInt Lib "kernel32" "GetPrivateProfileInt" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal nDefault As Int32, _
ByVal lpFileName As String) As Int32

Private Declare Function WritePrivateProfileString Lib "kernel32" "WritePrivateProfileString" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpString As String, _
ByVal lpFileName As String) As int32
mainone 2004-04-02
  • 打赏
  • 举报
回复
GetPrivateProfileString("***", "******", "", Result, 225, Path)
以下就是你想要的值
result.tostring
mainone 2004-04-02
  • 打赏
  • 举报
回复
你的API没有读出任何东西来,这个问题我曾经出现过,
在 GetPrivateProfileString 中的参数lpReturnedString 的类型修改为

ByVal lpReturnedString As System.Text.StringBuilder

用的时候 该参数这样定义 Dim Result As New System.Text.StringBuilder(225)
sumtec 2004-03-31
  • 打赏
  • 举报
回复
去掉Alias的话,不能够有A或者W的后缀……
不过我怀疑你现在的问题可能不能够简单的通过这种方法解决,我再想想
alikwok 2004-03-28
  • 打赏
  • 举报
回复
不行呀,改成W后连英文的都出错,而去调Alias改为A的则语法错误(呜呜)

有例子吗?或改成Unicode需否把所输入的转换成Unicode??
sumtec 2004-03-23
  • 打赏
  • 举报
回复
如果是在有VS.NET的操作系统下面,运行出错了,应该能够调试啊!他抛出Exception的时候你选择调试,然后看堆栈,不就知道问题是什么了吗?

就算抛出的Exception被你接住了,弹出来一个对话框,同样还是可以调试的啊,这时候你打开一个VS.NET,然后调试进程,不就看的一清二楚了吗?这时候看堆栈,不就知道调用情况了吗?
alikwok 2004-03-23
  • 打赏
  • 举报
回复
他抛出的错误指在我那些字符截取的操作上

原因是由于该字符为空,所以截取位<0的情况,而这些字符变量就是通过读取ini文件初始化的,因此才想到是读配置文件出错

后尝试把相同的可执行文件分别拷到名字为中文名及英文目录下执行,结果就是英文目录可正常运行,中文目录的则一运行就执出那些错误。
sumtec 2004-03-23
  • 打赏
  • 举报
回复
我的意思是,如果你要加Alias的话,最要用W结尾的。W结尾的是Unicode版本,A结尾的是AscII版本。

一般来说不需要通过Alias来强制是用Unicode版本(或者Ascii版本),系统应该能够自动解决的。
sumtec 2004-03-23
  • 打赏
  • 举报
回复
GetPrivateProfileStringW
其它的最后面的A都改成W,显示一下看看。

最好不用加上Alias,应该能够自动解决的。
alikwok 2004-03-23
  • 打赏
  • 举报
回复
是引用API的,如下

Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Int32, ByVal lpFileName As String) As int32

Private Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal nDefault As Int32, _
ByVal lpFileName As String) As Int32

Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpString As String, _
ByVal lpFileName As String) As int32

上面的定义有错吗?望高手指点,谢谢
sumtec 2004-03-23
  • 打赏
  • 举报
回复
1、你是否Win98?
是:98好像在Unicode支持方面有点问题,表现为部分数据控件不支持中文路径。
否:转问题二

2、你如何读取INI文件?通过API吗?
是:是否引用的API不是Unicode版本的?
否:转问题三

3、是否通过FileStream.Read或者StreamReader.Read/BinaryReader.ReadString等读出呢?
是:是否没有正确设置编码器?编码器和文本当中的不一样或者编码器是ASCII都会导致不能够正确读出中文字符串。
否:老兄,你得给一点代码啊!不然这么乱猜要猜到猴年马月啊!
alikwok 2004-03-18
  • 打赏
  • 举报
回复
我把整个目录(连未编绎的源文件)拷到桌面上用VB.NET打开,运行调试出现同样情况

比较能正常运行与出错的两个路径,发现能正常运行的目录全为英文数字(非汉字)为名称的目录,而出错的路径中含有中文(放在桌面上时有一级目录为“桌面”)

估计是因为这个原因,导致把ini文件所存在的位置发到读写ini文件的api函数中无法正常识别...

有解决办法吗?
Ninputer 2004-03-18
  • 打赏
  • 举报
回复
不可能吧,那你断言一下,看看是不是这样呀
alikwok 2004-03-18
  • 打赏
  • 举报
回复
我明白你的意思,但问题是我并没有拷到别的机子上啊!

一直以来就只有在公司的电脑和自家的电脑上运行和编译,
且每次更改编译后都只是在本地作调试,把BIN下的文件拷到本机别的目录下运行而以,因此不存在你所说的情况。

对此,我觉得有可能是application.startuppath所给出的启动目录中含有某些非法字符,导致不能正常读取到所指定相对路径中的配置文件。
sumtec 2004-03-17
  • 打赏
  • 举报
回复
难道你不明白我的意思是什么吗?你可能以为你已经把这个程序所需要的东西都拷贝了,但是事实上不是。比如你的程序有这么一行代码:

settings = GetSettings("C:\settings.ini")

而你事实上只拷贝了[Project]\bin\debug下面的东西,这样在你开发软件所使用的机器上面拷贝到哪里都没关系。可是当你拷贝到别人的机子上面的时候,由于他的机子里面C:\下面没有settings.ini,而你也没有考过去,于是到了GetSettings就抛出Exception了。

实际的情况也许不是一个具体的文件,可能是一个注册表项,或者某个数据库连接,或者某个密码容器。所以才要你在“出现问题的机子”上面装VS.NET,然后调试啊!不过你要是想自己猜测问题在哪里我也不反对。
sumtec 2004-03-15
  • 打赏
  • 举报
回复
你自己程序本身的问题,很明显的。

如果你想知道是什么问题,你找一台有VS.NET但是没有参与开发的机子调一下就知道了。古籍是少拷贝了什么文件,或者文件路径不对,或者文件路径被固化的程序代码里面了等等。
加载更多回复(7)

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧