首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定OUTPUT_DEBUG_STRING_INFO中字符串的长度?

如何确定OUTPUT_DEBUG_STRING_INFO中字符串的长度?
EN

Stack Overflow用户
提问于 2021-01-15 12:21:37
回答 1查看 115关注 0票数 0

信息结构的文档没有解释如何确定它所指向的字符串值的长度(或大小)。具体来说,nDebugStringLength的文档令人困惑:

字符串长度的下16位(以字节为单位)。由于nDebugStringLength的类型为WORD,所以这并不总是包含字符串的完整长度(以字节为单位)。 例如,如果原始输出字符串大于65536字节,则此字段将包含一个小于实际字符串长度(以字节为单位)的值。

据我所知,真正的大小可以是方程的任何一个解的值:

size = nDebugStringLength + (n * 65536)

对于n中的任何[0..65536)

问题:

如何确定字符串的正确大小?除非我忽略了一些东西,否则文档在这方面似乎是不够的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-15 17:48:28

最初,调试事件以DBGUI_WAIT_STATE_CHANGE形式出现。

如果使用WaitForDebugEvent[Ex] api -它在内部使用DbgUiConvertStateChangeStructure[Ex]DBGUI_WAIT_STATE_CHANGE转换为DEBUG_EVENT

DbgExceptionStateChang (in NewState)事件与DBG_PRINTEXCEPTION_WIDE_CDBG_PRINTEXCEPTION_C (在ExceptionCode中)转换为OUTPUT_DEBUG_STRING_INFO。Exception.ExceptionRecord.ExceptionInformation或ExceptionInformation3 (万一DBG_PRINTEXCEPTION_C和api版本没有Ex )都使用了nDebugStringLength。但是由于nDebugStringLength只有16位长,所以当原始值为32/64位长时,它只使用低16位的ExceptionInformation (或3)。请注意,ExceptionInformation (在DBG_PRINTEXCEPTION_WIDE_C情况下为3)包含字符中的字符串长度,包括终止于0的。相反,nDebugStringLength以字节为单位(如果我们使用WaitForDebugEventExDBG_PRINTEXCEPTION_WIDE_C异常- nDebugStringLength = (WORD)(ExceptionInformation[0] * sizeof(WCHAR)) )

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65736037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档