更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
los_hidumper.c 文件参考

浏览源代码.

函数

STATIC INT32 HiDumperOpen (struct file *filep)
 
STATIC INT32 HiDumperClose (struct file *filep)
 
STATIC INT32 HiDumperIoctl (struct file *filep, INT32 cmd, unsigned long arg)
 
VOID OsShellCmdSystemInfoGet (VOID)
 查看系统资源使用情况 更多...
 
UINT32 OsShellCmdFree (INT32 argc, const CHAR *argv[])
 
UINT32 OsShellCmdUname (INT32 argc, const CHAR *argv[])
 
UINT32 OsShellCmdDumpPmm (VOID)
 查看系统内存物理页及pagecache物理页使用情况 , Debug版本才具备的命令 # pmm 更多...
 
static void DumpSysInfo (void)
 
static void DoDumpCpuUsageUnsafe (CPUP_INFO_S *processCpupAll, CPUP_INFO_S *processCpup10s, CPUP_INFO_S *processCpup1s)
 
static void DumpCpuUsageUnsafe (void)
 
static void DumpMemUsage (void)
 
static void DumpTaskInfo (void)
 
static void PrintFileData (INT32 fd)
 
static void PrintFile (const char *filePath, const char *pHeader)
 
static void DumpFaultLog (void)
 
static void DumpMemData (struct MemDumpParam *param)
 
static void InjectKernelCrash (void)
 
static void RegisterCommonAdapter (void)
 
int HiDumperRegisterAdapter (struct HiDumperAdapter *pAdapter)
 
int OsHiDumperDriverInit (void)
 
 LOS_MODULE_INIT (OsHiDumperDriverInit, LOS_INIT_LEVEL_KMOD_EXTENDED)
 

变量

static struct HiDumperAdapter g_adapter
 
STATIC struct file_operations_vfs g_hidumperDevOps
 

函数说明

◆ DoDumpCpuUsageUnsafe()

static void DoDumpCpuUsageUnsafe ( CPUP_INFO_S processCpupAll,
CPUP_INFO_S processCpup10s,
CPUP_INFO_S processCpup1s 
)
static

在文件 los_hidumper.c145 行定义.

148{
149 UINT32 pid;
150
151 PRINTK("%-32s PID CPUUSE CPUUSE10S CPUUSE1S\n", "PName");
152 for (pid = 0; pid < g_processMaxNum; pid++) {
153 LosProcessCB *processCB = g_processCBArray + pid;
154 if (OsProcessIsUnused(processCB)) {
155 continue;
156 }
157 PRINTK("%-32s %u %5u.%1u%8u.%1u%7u.%-1u\n",
158 processCB->processName, processCB->processID,
159 processCpupAll[pid].usage / LOS_CPUP_PRECISION_MULT,
160 processCpupAll[pid].usage % LOS_CPUP_PRECISION_MULT,
161 processCpup10s[pid].usage / LOS_CPUP_PRECISION_MULT,
162 processCpup10s[pid].usage % LOS_CPUP_PRECISION_MULT,
163 processCpup1s[pid].usage / LOS_CPUP_PRECISION_MULT,
164 processCpup1s[pid].usage % LOS_CPUP_PRECISION_MULT);
165 }
166}
LITE_OS_SEC_BSS LosProcessCB * g_processCBArray
进程池数组
Definition: los_process.c:80
LITE_OS_SEC_BSS UINT32 g_processMaxNum
进程最大数量,默认64个
Definition: los_process.c:86
STATIC INLINE BOOL OsProcessIsUnused(const LosProcessCB *processCB)
unsigned int UINT32
Definition: los_typedef.h:57
UINT32 processID
CHAR processName[OS_PCB_NAME_LEN]
函数调用图:
这是这个函数的调用关系图:

◆ DumpCpuUsageUnsafe()

static void DumpCpuUsageUnsafe ( void  )
static

在文件 los_hidumper.c169 行定义.

170{
171 PRINTK("\n%s\n", CPU_USAGE_HEADER);
172#ifdef LOSCFG_KERNEL_CPUP
173 UINT32 size;
174 CPUP_INFO_S *processCpup = NULL;
175 CPUP_INFO_S *processCpupAll = NULL;
176 CPUP_INFO_S *processCpup10s = NULL;
177 CPUP_INFO_S *processCpup1s = NULL;
178
179 size = sizeof(*processCpup) * g_processMaxNum * CPUP_TYPE_COUNT;
180 processCpup = LOS_MemAlloc(m_aucSysMem1, size);
181 if (processCpup == NULL) {
182 PRINT_ERR("func: %s, LOS_MemAlloc failed, Line: %d\n", __func__, __LINE__);
183 return;
184 }
185 processCpupAll = processCpup;
186 processCpup10s = processCpupAll + g_processMaxNum;
187 processCpup1s = processCpup10s + g_processMaxNum;
188 (VOID)memset_s(processCpup, size, 0, size);
192 DoDumpCpuUsageUnsafe(processCpupAll, processCpup10s, processCpup1s);
193 (VOID)LOS_MemFree(m_aucSysMem1, processCpup);
194#else
195 PRINTK("\nUnsupported!\n");
196#endif
197}
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_GetAllProcessCpuUsage(UINT16 mode, CPUP_INFO_S *cpupInfo, UINT32 len)
获取系统所有进程的历史CPU占用率
Definition: los_cpup.c:584
@ CPUP_LAST_TEN_SECONDS
Definition: los_cpup.h:132
@ CPUP_ALL_TIME
Definition: los_cpup.h:134
@ CPUP_LAST_ONE_SECONDS
Definition: los_cpup.h:133
VOID * LOS_MemAlloc(VOID *pool, UINT32 size)
从指定内存池中申请size长度的内存,注意这可不是从内核堆空间中申请内存
Definition: los_memory.c:1123
UINT8 * m_aucSysMem1
系统动态内存池地址的起始地址 @note_thinking 能否不要用 0,1来命名核心变量 ???
Definition: los_memory.c:108
UINT32 LOS_MemFree(VOID *pool, VOID *ptr)
释放从指定动态内存中申请的内存
Definition: los_memory.c:1369
static void DoDumpCpuUsageUnsafe(CPUP_INFO_S *processCpupAll, CPUP_INFO_S *processCpup10s, CPUP_INFO_S *processCpup1s)
Definition: los_hidumper.c:145
函数调用图:
这是这个函数的调用关系图:

◆ DumpFaultLog()

static void DumpFaultLog ( void  )
static

在文件 los_hidumper.c271 行定义.

272{
273#ifdef LOSCFG_BLACKBOX
274 PrintFile(KERNEL_FAULT_LOG_PATH, "************kernel fault info************");
275 PrintFile(USER_FAULT_LOG_PATH, "************user fault info************");
276#endif
277}
static void PrintFile(const char *filePath, const char *pHeader)
Definition: los_hidumper.c:245
函数调用图:
这是这个函数的调用关系图:

◆ DumpMemData()

static void DumpMemData ( struct MemDumpParam param)
static

在文件 los_hidumper.c279 行定义.

280{
281 PRINTK("\nDumpType: %d\n", param->type);
282 PRINTK("Unsupported now!\n");
283}
enum MemDumpType type
Definition: los_hidumper.h:54
这是这个函数的调用关系图:

◆ DumpMemUsage()

static void DumpMemUsage ( void  )
static

在文件 los_hidumper.c199 行定义.

200{
201 PRINTK("\n%s\n", MEM_USAGE_HEADER);
202#ifdef LOSCFG_SHELL
203 PRINTK("Unit: KB\n");
204 const char *argv[1] = {"-k"};
205 (VOID)OsShellCmdFree(ARRAY_SIZE(argv), &argv[0]);
206 PRINTK("%s\n", PAGE_USAGE_HEADER);
207 (VOID)OsShellCmdDumpPmm();
208#else
209 PRINTK("\nUnsupported!\n");
210#endif
211}
UINT32 OsShellCmdDumpPmm(VOID)
查看系统内存物理页及pagecache物理页使用情况 , Debug版本才具备的命令 # pmm
Definition: vm_shellcmd.c:184
UINT32 OsShellCmdFree(INT32 argc, const CHAR *argv[])
函数调用图:
这是这个函数的调用关系图:

◆ DumpSysInfo()

static void DumpSysInfo ( void  )
static

在文件 los_hidumper.c132 行定义.

133{
134 PRINTK("\n%s\n", SYS_INFO_HEADER);
135#ifdef LOSCFG_SHELL
136 const char *argv[1] = {"-a"};
137 (VOID)OsShellCmdUname(ARRAY_SIZE(argv), &argv[0]);
139#else
140 PRINTK("\nUnsupported!\n");
141#endif
142}
UINT32 OsShellCmdUname(INT32 argc, const CHAR *argv[])
VOID OsShellCmdSystemInfoGet(VOID)
查看系统资源使用情况
函数调用图:
这是这个函数的调用关系图:

◆ DumpTaskInfo()

static void DumpTaskInfo ( void  )
static

在文件 los_hidumper.c213 行定义.

214{
215 PRINTK("\n%s\n", TASK_INFO_HEADER);
216#ifdef LOSCFG_SHELL
217 (VOID)OsShellCmdTskInfoGet(OS_ALL_TASK_MASK, NULL, OS_PROCESS_INFO_ALL);
218#else
219 PRINTK("\nUnsupported!\n");
220#endif
221}
UINT32 OsShellCmdTskInfoGet(UINT32 taskID, VOID *seqfile, UINT16 flag)
函数调用图:
这是这个函数的调用关系图:

◆ HiDumperClose()

STATIC INT32 HiDumperClose ( struct file filep)

在文件 los_hidumper.c126 行定义.

127{
128 (VOID)filep;
129 return 0;
130}

◆ HiDumperIoctl()

static INT32 HiDumperIoctl ( struct file filep,
INT32  cmd,
unsigned long  arg 
)

在文件 los_hidumper.c294 行定义.

295{
296 INT32 ret = 0;
297
298 switch (cmd) {
299 case HIDUMPER_DUMP_ALL:
300 INVOKE_INTERFACE(&g_adapter, struct HiDumperAdapter, DumpSysInfo);
301 INVOKE_INTERFACE(&g_adapter, struct HiDumperAdapter, DumpCpuUsage);
302 INVOKE_INTERFACE(&g_adapter, struct HiDumperAdapter, DumpMemUsage);
303 INVOKE_INTERFACE(&g_adapter, struct HiDumperAdapter, DumpTaskInfo);
304 break;
305 case HIDUMPER_CPU_USAGE:
306 INVOKE_INTERFACE(&g_adapter, struct HiDumperAdapter, DumpCpuUsage);
307 break;
308 case HIDUMPER_MEM_USAGE:
309 INVOKE_INTERFACE(&g_adapter, struct HiDumperAdapter, DumpMemUsage);
310 break;
311 case HIDUMPER_TASK_INFO:
312 INVOKE_INTERFACE(&g_adapter, struct HiDumperAdapter, DumpTaskInfo);
313 break;
314 case HIDUMPER_INJECT_KERNEL_CRASH:
315 INVOKE_INTERFACE(&g_adapter, struct HiDumperAdapter, InjectKernelCrash);
316 break;
317 case HIDUMPER_DUMP_FAULT_LOG:
318 INVOKE_INTERFACE(&g_adapter, struct HiDumperAdapter, DumpFaultLog);
319 break;
320 case HIDUMPER_MEM_DATA:
321 if (g_adapter.DumpMemData != NULL) {
322 g_adapter.DumpMemData((struct MemDumpParam *)((UINTPTR)arg));
323 }
324 break;
325 default:
326 ret = EPERM;
327 PRINTK("Invalid CMD: 0x%x\n", (UINT32)cmd);
328 break;
329 }
330
331 return ret;
332}
static void DumpTaskInfo(void)
Definition: los_hidumper.c:213
static void InjectKernelCrash(void)
Definition: los_hidumper.c:285
static void DumpMemUsage(void)
Definition: los_hidumper.c:199
static void DumpSysInfo(void)
Definition: los_hidumper.c:132
static struct HiDumperAdapter g_adapter
Definition: los_hidumper.c:104
static void DumpFaultLog(void)
Definition: los_hidumper.c:271
signed int INT32
Definition: los_typedef.h:60
unsigned long UINTPTR
Definition: los_typedef.h:68
void(* DumpMemData)(struct MemDumpParam *param)
Definition: los_hidumper.h:66
函数调用图:

◆ HiDumperOpen()

STATIC INT32 HiDumperOpen ( struct file filep)

在文件 los_hidumper.c120 行定义.

121{
122 (VOID)filep;
123 return 0;
124}

◆ HiDumperRegisterAdapter()

int HiDumperRegisterAdapter ( struct HiDumperAdapter pAdapter)

在文件 los_hidumper.c348 行定义.

349{
350 if (pAdapter == NULL) {
351 PRINT_ERR("pAdapter: %p\n", pAdapter);
352 return -1;
353 }
354
355 REPLACE_INTERFACE(&g_adapter, pAdapter, struct HiDumperAdapter, DumpSysInfo);
356 REPLACE_INTERFACE(&g_adapter, pAdapter, struct HiDumperAdapter, DumpCpuUsage);
357 REPLACE_INTERFACE(&g_adapter, pAdapter, struct HiDumperAdapter, DumpMemUsage);
358 REPLACE_INTERFACE(&g_adapter, pAdapter, struct HiDumperAdapter, DumpTaskInfo);
359 REPLACE_INTERFACE(&g_adapter, pAdapter, struct HiDumperAdapter, DumpFaultLog);
360 REPLACE_INTERFACE(&g_adapter, pAdapter, struct HiDumperAdapter, DumpMemData);
361 REPLACE_INTERFACE(&g_adapter, pAdapter, struct HiDumperAdapter, InjectKernelCrash);
362
363 return 0;
364}
static void DumpMemData(struct MemDumpParam *param)
Definition: los_hidumper.c:279
函数调用图:
这是这个函数的调用关系图:

◆ InjectKernelCrash()

static void InjectKernelCrash ( void  )
static

在文件 los_hidumper.c285 行定义.

286{
287#ifdef LOSCFG_DEBUG_VERSION
288 *((INT32 *)KERNEL_FAULT_ADDR) = KERNEL_FAULT_VALUE;
289#else
290 PRINTK("\nUnsupported!\n");
291#endif
292}
这是这个函数的调用关系图:

◆ LOS_MODULE_INIT()

LOS_MODULE_INIT ( OsHiDumperDriverInit  ,
LOS_INIT_LEVEL_KMOD_EXTENDED   
)

◆ OsHiDumperDriverInit()

int OsHiDumperDriverInit ( void  )

在文件 los_hidumper.c366 行定义.

367{
368 INT32 ret;
369
370#ifdef LOSCFG_DEBUG_VERSION
372 ret = register_driver(HIDUMPER_DEVICE, &g_hidumperDevOps, HIDUMPER_DEVICE_MODE, NULL);
373 if (ret != 0) {
374 PRINT_ERR("Hidumper register driver failed!\n");
375 return -1;
376 }
377#endif
378
379 return 0;
380}
STATIC struct file_operations_vfs g_hidumperDevOps
Definition: los_hidumper.c:105
static void RegisterCommonAdapter(void)
Definition: los_hidumper.c:334
函数调用图:

◆ OsShellCmdDumpPmm()

UINT32 OsShellCmdDumpPmm ( VOID  )

查看系统内存物理页及pagecache物理页使用情况 , Debug版本才具备的命令 # pmm

在文件 vm_shellcmd.c184 行定义.

185{
186 OsVmPhysDump();
187
190 return OS_ERROR;
191}
VOID OsVmPhysDump(VOID)
dump 物理内存
Definition: los_vm_dump.c:516
void PathCacheMemoryDump(void)
Definition: path_cache.c:81
void VnodeMemoryDump(void)
Definition: vnode.c:706
函数调用图:
这是这个函数的调用关系图:

◆ OsShellCmdFree()

UINT32 OsShellCmdFree ( INT32  argc,
const CHAR argv[] 
)

在文件 mempt_shellcmd.c174 行定义.

175{
176 if (argc > 1) {
177 PRINTK("\nUsage: free or free [-k/-m]\n");
178 return OS_ERROR;
179 }
180 if (OsShellCmdFreeInfo(argc, argv) != 0) {
181 return OS_ERROR;
182 }
183 OsShellCmdSectionInfo(argc, argv);
184 return 0;
185}
LITE_OS_SEC_TEXT_MINOR STATIC VOID OsShellCmdSectionInfo(INT32 argc, const CHAR *argv[])
LITE_OS_SEC_TEXT_MINOR STATIC UINT32 OsShellCmdFreeInfo(INT32 argc, const CHAR *argv[])
函数调用图:
这是这个函数的调用关系图:

◆ OsShellCmdSystemInfoGet()

VOID OsShellCmdSystemInfoGet ( VOID  )

查看系统资源使用情况

在文件 sysinfo_shellcmd.c119 行定义.

120{
121 UINT8 isTaskEnable = TRUE;
122#ifdef LOSCFG_BASE_IPC_SEM
123 UINT8 isSemEnable = TRUE;
124#else
125 UINT8 isSemEnable = FALSE;
126#endif
127#ifdef LOSCFG_BASE_IPC_QUEUE
128 UINT8 isQueueEnable = TRUE;
129#else
130 UINT8 isQueueEnable = FALSE;
131#endif
132#ifdef LOSCFG_BASE_CORE_SWTMR_ENABLE
133 UINT8 isSwtmrEnable = TRUE;
134#else
135 UINT8 isSwtmrEnable = FALSE;
136#endif
137//模块名称 当前使用量 最大可用量 模块是否开启
138 PRINTK("\n Module Used Total Enabled\n");
139 PRINTK("--------------------------------------------\n");
140 PRINTK(" Task %-10u%-10d%s\n",
141 OsShellCmdTaskCntGet(), //有效任务数
142 LOSCFG_BASE_CORE_TSK_LIMIT, //任务最大数 128
143 SYSINFO_ENABLED(isTaskEnable));//任务是否失效 YES or NO
144 PRINTK(" Sem %-10u%-10d%s\n",
145 OsShellCmdSemCntGet(), //信号量的数量
146 LOSCFG_BASE_IPC_SEM_LIMIT, //信号量最大数 1024
147 SYSINFO_ENABLED(isSemEnable));//信号量是否失效 YES or NO
148 PRINTK(" Queue %-10u%-10d%s\n",
149 OsShellCmdQueueCntGet(), //队列的数量
150 LOSCFG_BASE_IPC_QUEUE_LIMIT, //队列的最大数 1024
151 SYSINFO_ENABLED(isQueueEnable));//队列是否失效 YES or NO
152 PRINTK(" SwTmr %-10u%-10d%s\n",
153 OsShellCmdSwtmrCntGet(), //定时器的数量
154 LOSCFG_BASE_CORE_SWTMR_LIMIT, //定时器的总数 1024
155 SYSINFO_ENABLED(isSwtmrEnable)); //定时器是否失效 YES or NO
156}
unsigned char UINT8
Definition: los_typedef.h:55
UINT32 OsShellCmdTaskCntGet(VOID)
UINT32 OsShellCmdSemCntGet(VOID)
UINT32 OsShellCmdSwtmrCntGet(VOID)
UINT32 OsShellCmdQueueCntGet(VOID)
函数调用图:
这是这个函数的调用关系图:

◆ OsShellCmdUname()

UINT32 OsShellCmdUname ( INT32  argc,
const CHAR argv[] 
)

在文件 mempt_shellcmd.c187 行定义.

188{
189 if (argc == 0) {
190 PRINTK("%s\n", KERNEL_NAME);
191 return 0;
192 }
193
194 if (argc == 1) {
195 if (strcmp(argv[0], "-a") == 0) {
196 PRINTK("%s %d.%d.%d.%d %s %s\n", KERNEL_NAME, KERNEL_MAJOR, KERNEL_MINOR, KERNEL_PATCH, KERNEL_ITRE,\
197 __DATE__, __TIME__);
198 return 0;
199 } else if (strcmp(argv[0], "-s") == 0) {
200 PRINTK("%s\n", KERNEL_NAME);
201 return 0;
202 } else if (strcmp(argv[0], "-t") == 0) {
203 PRINTK("build date : %s %s\n", __DATE__, __TIME__);
204 return 0;
205 } else if (strcmp(argv[0], "-v") == 0) {
206 PRINTK("%d.%d.%d.%d\n", KERNEL_MAJOR, KERNEL_MINOR, KERNEL_PATCH, KERNEL_ITRE);
207 return 0;
208 } else if (strcmp(argv[0], "--help") == 0) {
209 PRINTK("-a, print all information\n"
210 "-s, print the kernel name\n"
211 "-t, print the build date\n"
212 "-v, print the kernel version\n");
213 return 0;
214 }
215 }
216
217 PRINTK("uname: invalid option %s\n"
218 "Try 'uname --help' for more information.\n",
219 argv[0]);
220 return OS_ERROR;
221}
这是这个函数的调用关系图:

◆ PrintFile()

static void PrintFile ( const char *  filePath,
const char *  pHeader 
)
static

在文件 los_hidumper.c245 行定义.

246{
247#ifdef LOSCFG_FS_VFS
248 int fd;
249
250 if (filePath == NULL || pHeader == NULL) {
251 PRINT_ERR("filePath: %p, pHeader: %p\n", filePath, pHeader);
252 return;
253 }
254
255 fd = open(filePath, O_RDONLY);
256 if (fd >= 0) {
257 PRINTK("\n%s\n", pHeader);
258 PrintFileData(fd);
259 (void)close(fd);
260 } else {
261 PRINT_ERR("Open [%s] failed or there's no fault log!\n", filePath);
262 }
263#else
264 (VOID)filePath;
265 (VOID)pHeader;
266 PRINT_ERR("LOSCFG_FS_VFS isn't defined!\n");
267#endif
268}
static void PrintFileData(INT32 fd)
Definition: los_hidumper.c:224
ARG_NUM_3 ARG_NUM_1 ARG_NUM_2 ARG_NUM_2 ARG_NUM_3 ARG_NUM_1 ARG_NUM_4 ARG_NUM_2 ARG_NUM_2 ARG_NUM_5 ARG_NUM_2 void
函数调用图:
这是这个函数的调用关系图:

◆ PrintFileData()

static void PrintFileData ( INT32  fd)
static

在文件 los_hidumper.c224 行定义.

225{
226#ifdef LOSCFG_FS_VFS
227 CHAR buf[READ_BUF_SIZE];
228
229 if (fd < 0) {
230 PRINT_ERR("fd: %d!\n", fd);
231 return;
232 }
233
234 (void)memset_s(buf, sizeof(buf), 0, sizeof(buf));
235 while (read(fd, buf, sizeof(buf) - 1) > 0) {
236 PRINTK("%s", buf);
237 (void)memset_s(buf, sizeof(buf), 0, sizeof(buf));
238 }
239#else
240 (VOID)fd;
241 PRINT_ERR("LOSCFG_FS_VFS isn't defined!\n");
242#endif
243}
char CHAR
Definition: los_typedef.h:63
这是这个函数的调用关系图:

◆ RegisterCommonAdapter()

static void RegisterCommonAdapter ( void  )
static

在文件 los_hidumper.c334 行定义.

335{
336 struct HiDumperAdapter adapter;
337
338 adapter.DumpSysInfo = DumpSysInfo;
339 adapter.DumpCpuUsage = DumpCpuUsageUnsafe;
340 adapter.DumpMemUsage = DumpMemUsage;
341 adapter.DumpTaskInfo = DumpTaskInfo;
342 adapter.DumpFaultLog = DumpFaultLog;
343 adapter.DumpMemData = DumpMemData;
344 adapter.InjectKernelCrash = InjectKernelCrash;
345 HiDumperRegisterAdapter(&adapter);
346}
static void DumpCpuUsageUnsafe(void)
Definition: los_hidumper.c:169
int HiDumperRegisterAdapter(struct HiDumperAdapter *pAdapter)
Definition: los_hidumper.c:348
void(* DumpSysInfo)(void)
Definition: los_hidumper.h:61
函数调用图:
这是这个函数的调用关系图:

变量说明

◆ g_adapter

struct HiDumperAdapter g_adapter
static

在文件 los_hidumper.c104 行定义.

◆ g_hidumperDevOps

STATIC struct file_operations_vfs g_hidumperDevOps
初始值:
= {
NULL,
NULL,
NULL,
NULL,
#ifndef CONFIG_DISABLE_POLL
NULL,
#endif
NULL,
}
STATIC INT32 HiDumperOpen(struct file *filep)
Definition: los_hidumper.c:120
STATIC INT32 HiDumperClose(struct file *filep)
Definition: los_hidumper.c:126
STATIC INT32 HiDumperIoctl(struct file *filep, INT32 cmd, unsigned long arg)
Definition: los_hidumper.c:294

在文件 los_hidumper.c105 行定义.