barriers / 阅读 / 详情

Zstack中如何实现自己的任务 详细03

2023-07-09 12:28:02
TAG: ck ta ac tac st stack
共1条回复
小教板

{ osal_pwrmgr_powerconserve(); // Put the processor/system into sleep } #endif } } //临界区资源管理 先看一个临界区代码保护的例子: HAL_ENTER_CRITICAL_SECTION(intState); events = activeTask->events; activeTask->events = 0; //清楚任务的事件 HAL_EXIT_CRITICAL_SECTION(intState); 其中:中断宏定义如下 #define HAL_ENABLE_INTERRUPTS() st( EA = 1; ) #define HAL_DISABLE_INTERRUPTS() st( EA = 0; ) #define HAL_INTERRUPTS_ARE_ENABLED() (EA) typedef unsigned char halIntState_t; #define HAL_ENTER_CRITICAL_SECTION(x) st( x = EA; HAL_DISABLE_INTERRUPTS(); ) #define HAL_EXIT_CRITICAL_SECTION(x) st( EA = x; ) #define HAL_CRITICAL_STATEMENT(x) st( halIntState_t s; HAL_ENTER_CRITICAL_SECTION(s); x; HAL_EXIT_CRITICAL_SECTION(s); ) 以及相关的st 宏: #define st(x) do { x } while (__LINE__ == -1) (1)cc2430 芯片中的中断使能的特殊功能寄存器(SFRs):IEN0,IEN1 和IEN2,(见 cc2430 datasheet: P49)。这三个寄存器的不同的位控制了不同的硬件的中断使能,比如IEN2 中的第五位WDTIE 控制着看门狗时钟的中断使能。这其中有一个比较特殊的位是IEN0 的第7 位,名称为EA,控制着所有中断的使能,为0 时 将没有中断相应,为1 时每一个中断源的使能受相应的位的控制。上面的宏即是用芯片的EA=0 来关中断实现临界资源的保护。 (2)set 宏定义如下,表示执行x 指令,注意x 是一个完整的语句,需要加分号。 #define st(x) do { x } while (__LINE__ == -1) 而整个宏的定义结束时没有分号,而是在最后的应用时加的分号,如: HAL_ENTER_CRITICAL_SECTION(intState); (3)HAL_ENABLE_INTERRUPTS()和HAL_DISABLE_INTERRUPTS()这两个宏分别实现了cc2430 的所有中断的开和关。HAL_ENTER_CRITICAL_SECTION(x)宏首先将 EA 的值保存在变量x 中,然后关闭所有中断,进行后面的临街资源处理。 HAL_EXIT_CRITICAL_SECTION(x)宏则是回复刚才保存在x 中的EA 的值。 HAL_CRITICAL_STATEMENT(x)宏的功能是将x 作为临界代码执行,首先声明了用于保存EA 值的变量,然后调用进入临界区宏,执行临界代码x,最后执行退出临界区的宏。 (4)注意HAL_CRITICAL_STATEMENT(x)这个宏,因为st 宏的实现中x 是一些可以执行的完整c 语句,更主要的是写在do{}while()中,它值一个子的程序片段,因此x 可以做很多事,比如声明变量等。否则你会奇怪,这样定义宏在宏展开的时候如果使用多个这个宏,会不会出现重复定义(HAL_CRITICAL_STATEMENT(x) 实现代码中的halIntState_t s;),会不会出现在程序的中间来定义变量(c语言要求要使用的变量需在最前面定义)等问题。其实这些问题是不会出现的,真是因为HAL_CRITICAL_STATEMENT(x)的x 的执行在do-while 中的do 子句中。 下面是一个类似的验证例子程序: #include #define st(x) do{x}while(__LINE__==-1) #define enable() st(EA = 1;) //使能所有中断 #define disable() st(EA = 0;) //关闭所有中断 #define enter(x) st(x = EA; disable();) //进入临界区 #define exit(x) st(EA = x;) //退出临界区 //简写临界代码的执行 #define critical(s) st(int temp; enter(temp); s; exit(temp);) //模拟控制所有中断的变量 int EA = 5; int main() { int a; enter(a); printf("EA=%d, a=%d ",EA,a); exit(a); //验证多次执行宏不会出现重复定义变量的问题 critical(printf("hello world-first ");); critical(printf("hello world-second ");); //上面的critical(printf("hello world-first "););展开后的等价代码 do { int temp; do{ temp = EA; do{ EA = 0; }while(__LINE__==-1); }while(__LINE__==-1); printf("hello world "); do{ EA =temp; }while(__LINE__==-1); }while(__LINE__==-1); //验证在子模块中可以再次声明变量 { int a = 12; printf("%d ",a); { int a = 89; printf("%d ",a); } } return 0; } 执行结果为: EA=0, a=5 hello world-first hello world-second hello world 12 89 PS: (1)c 程序中的各个宏定义的顺序任意。 (1)c 程序中要求变量需先定义所有要使用的变量,然后才使用,是对用一个层次模块来说,在子层次中可以遵循这个规则再次定义变量。一个花括号中的括起来的内容{...}可以看作一个子模块。 Zstack 设置发送功率(CC2530) 在mac_radio.c 中找到macRadioSetTxPower 函数,其具体内容复制如下: #ifndef HAL_MAC_USE_REGISTER_POWER_VALUES MAC_INTERNAL_API void macRadioSetTxPower(uint8 txPower) { halIntState_t s; #if defined MAC_RUNTIME_CC2591 || defined MAC_RUNTIME_CC2590 const uint8 CODE *pTable = macRadioDefsTxPwrTables[macRadioDefsRefTableId >> 4]; #elif defined HAL_PA_LNA || defined HAL_PA_LNA_CC2590 const uint8 CODE *pTable = macRadioDefsTxPwrTables[0]; #else const uint8 CODE *pTable = macRadioDefsTxPwrBare; //该table 中含有txPower 的设置值,将该table 的首地址赋给指针pTable, //macRadioDefsTxPwrBare[]定义在mac_radio_defs.c 中 #endif if ((int8)txPower > (int8)pTable[MAC_RADIO_DEFS_TBL_TXPWR_FIRST_ENTRY]) { txPower = pTable[MAC_RADIO_DEFS_TBL_TXPWR_FIRST_ENTRY];//发送功率上限值 } else if ((int8)txPower < (int8)pTable[MAC_RADIO_DEFS_TBL_TXPWR_LAST_ENTRY]) { txPower = pTable[MAC_RADIO_DEFS_TBL_TXPWR_LAST_ENTRY];//发送功率下限值 } HAL_ENTER_CRITICAL_SECTION(s); { uint8 index = pTable[MAC_RADIO_DEFS_TBL_TXPWR_FIRST_ENTRY] - txPower + MAC_RADIO_DEFS_TBL_TXPWR_ENTRIES; reqTxPower = pTable[index]; } //通过计算转换查表index,得到发送功率值,将其赋给reqTxPower, //函数macRadioUpdateTxPower 中用于更新发送功率 HAL_EXIT_CRITICAL_SECTION(s); macRadioUpdateTxPower(); } #else MAC_INTERNAL_API void macRadioSetTxPower(uint8 txPower) {//直接获得reqTxPower halIntState_t s; HAL_ENTER_CRITICAL_SECTION(s); reqTxPower = txPower; HAL_EXIT_CRITICAL_SECTION(s); macRadioUpdateTxPower(); } 下面了解一下macRadioUpdateTxPower 函数,其函数体如下: MAC_INTERNAL_API void macRadioUpdateTxPower(void) { halIntState_t s; HAL_ENTER_CRITICAL_SECTION(s);//进入临界区 if (reqTxPower != macPhyTxPower)//macPhyTxPower 即为当前实际的发送功率 { if (!macRxOutgoingAckFlag && !MAC_TX_IS_PHYSICALLY_ACTIVE()) //当有发送任务正在进行时,不能改变发送功率。 //当前的发送任务完成后,将重新调用该函数进行发送功率设置。 { macPhyTxPower = reqTxPower; MAC_RADIO_SET_TX_POWER(macPhyTxPower);//设置寄存器TXPOWER 为 macPhyTxPower,即reqTxPower } } HAL_EXIT_CRITICAL_SECTION(s);//离开临界区 } 通过上面的函数,我们根据自己的需要,适当对发送功率进行设置。 关于ZStack-CC2530-2.3.0-1.4.0 中simpleApp 例子的组网(一) 所有的C 语言编写的程序,入口函数一定是main 函数,首先看一下ZMain.c 函数。 int main( void ) { osal_int_disable( INTS_ALL ); HAL_BOARD_INIT(); zmain_vdd_check(); InitBoard( OB_COLD ); HalDriverInit(); osal_nv_init( NULL ); ZMacInit(); zmain_ext_addr(); zgInit(); #ifndef NONWK afInit(); #endif osal_init_system(); osal_int_enable( INTS_ALL ); InitBoard( OB_READY ); zmain_dev_info(); #ifdef LCD_SUPPORTED zmain_lcd_init(); #endif #ifdef WDT_IN_PM1 WatchDogEnable( WDTIMX ); #endif osal_start_system(); return 0; } 主函数要做的事情非常简单,首先进行了一些初始化,包括各层的初始化,硬件初始化,以及任务的初始化等,然后就进入到操作系统当中,即 osal_start_system(); 就再也出不来了。操作系统的作用就是如果有事件发生,就把这个消息通知给处理该事件的事件处理函数去执行,然后一直的循环查找有没有事件发生。另外说一下,事件是定义在任务当中的,即一个任务可能有多个事件,每个任务对应一个事件处理函数。在这个程序中,一共有6 个任务,有兴趣的同学可以自己查看void osalInitTasks( void )函数的代码。 接下来看一下zigbee 协调器是怎么建立网络的 首先我们必须选择SimpleCollectorEB 版本,在APP 文件下看到sapi.c 源文件。找到SAPI_Init(byte task_id)函数,此函数是进行sapi 层的初始化,代码如下 void SAPI_Init( byte task_id ) { sapi_TaskID = task_id;//将操作系统初始化任务时定义的任务id 号传进来 sapi_bindInProgress = 0xffff;//设置不允许绑定 sapi_epDesc.task_id = &sapi_TaskID;//给端口描述符的任务ID 号赋值,感觉也就是端口收到的数据或者消息就交给ID 号指定的任务来处理。 sapi_epDesc.endPoint = 0;//端口描述符端口号初始化为0。 #if ( SAPI_CB_FUNC )//编译通过 sapi_epDesc.endPoint = zb_SimpleDesc.EndPoint;//端口号赋值 sapi_epDesc.task_id = &sapi_TaskID;//任务ID 赋值,与上面的任务ID 的值是相同的。 sapi_epDesc.simpleDesc = (SimpleDescriptionFormat_t *)&zb_SimpleDesc;//简单描述符赋值,是描述一个端口最基本的信息 sapi_epDesc.latencyReq = noLatencyReqs;//这是一个枚举类型的,不清楚具体含义,不过大家都设成noLatencyReqs,除此之外还有两个值。 afRegister( &sapi_epDesc );//将定义的端点在AF 层注册,一定要注册后端点才会生效 #endif afSetMatch(sapi_epDesc.simpleDesc->EndPoint, FALSE);//设置描述符不能匹配 // Register callback evetns from the ZDApp ZDO_RegisterForZDOMsg( sapi_TaskID, NWK_addr_rsp );//在sapi 层注册网络地址事件,这个函数可以截取空中发来的消息,有兴趣的可以查查资料,第一个函数是截取的消息发到哪个任务中去,第二个参数,cluserID 是消息的类型。 ZDO_RegisterForZDOMsg( sapi_TaskID, Match_Desc_rsp );//同理,在sapi 层注册匹配描述符事件。 #if ( SAPI_CB_FUNC ) #if (defined HAL_KEY) && (HAL_KEY == TRUE) // Register for HAL events RegisterForKeys( sapi_TaskID );//注册按键响应事件 if ( HalKeyRead () == HAL_KEY_SW_5) { uint8 startOptions = ZCD_STARTOPT_CLEAR_STATE | ZCD_STARTOPT_CLEAR_CONFIG; zb_WriteConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions ); zb_SystemReset(); } #endif // HAL_KEY osal_set_event(task_id, ZB_ENTRY_EVENT);//在这里设置了一个进入事件,第一个参数是task_id 是任务的ID 号,因此我们可以在sapi 层的事件处理函数中找到这个进入事件是怎么处理的。 #endif } 在UINT16 SAPI_ProcessEvent( byte task_id, UINT16 events )函数中,找到 if ( events & ZB_ENTRY_EVENT ) { uint8 startOptions; // Give indication to application of device startup #if ( SAPI_CB_FUNC ) zb_HandleOsalEvent( ZB_ENTRY_EVENT ); #endif // LED off cancels HOLD_AUTO_START blink set in the stack HalLedSet (HAL_LED_4, HAL_LED_MODE_OFF);//为了方便观察实验现象,将第四个灯关闭。 zb_ReadConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions ); if ( startOptions & ZCD_STARTOPT_AUTO_START ) { zb_StartRequest(); } else { // blink leds and wait for external input to config and restart HalLedBlink(HAL_LED_2, 0, 50, 500); } return (events ^ ZB_ENTRY_EVENT ); } 这个时候,程序就停在这里,只能看到LED_2 在闪烁。这个时候我们可以按下按键1,然后去找一下,事件处理函数中如何对此事件进行相应。找到UINT16 SAPI_ProcessEvent( byte task_id, UINT16 events )函数中的关于按键的处理: case KEY_CHANGE: #if ( SAPI_CB_FUNC ) zb_HandleKeys( ((keyChange_t *)pMsg)->state, ((keyChange_t *)pMsg)->keys ); #endif break; 进入到HandleKeys 函数中,找到 if ( keys & HAL_KEY_SW_1 ) { if ( myAppState == APP_INIT ) { zb_ReadConfiguration( ZCD_NV_LOGICAL_TYPE, sizeof(uint8), &logicalType );//读取flash 中的设备类型 if ( logicalType != ZG_DEVICETYPE_ENDDEVICE ) { logicalType = ZG_DEVICETYPE_COORDINATOR;//将设备类型改变为协调器类型 zb_WriteConfiguration(ZCD_NV_LOGICAL_TYPE, sizeof(uint8), &logicalType);//将设备类型写入到flash 中 } zb_ReadConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions );//读取启动模式 startOptions = ZCD_STARTOPT_AUTO_START;//将启动模式赋值为自动启动模式 zb_WriteConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions );//将启动模式存入到flash 中 zb_SystemReset();//系统重启设置。这时候flash 中,启动模式就变成了ZCD_STARTOPT_AUTO_START,系统重启以后,系统继续刚才讲过的过程,不同的是在进行到进入事件处理函数时,if ( startOptions & ZCD_STARTOPT_AUTO_START )的值成立,调用if 语句里面的zb_StartRequest() 函数;即执行开始请求函数。 } 接下来进入到zb_StartRequest 函数中看一看,原代码如下: void zb_StartRequest() { uint8 logicalType; zb_ReadConfiguration( ZCD_NV_LOGICAL_TYPE, sizeof(uint8), &logicalType );//从flash 中读出设备类型。 // Check for bad combinations of compile flag definitions and device type setting. if ((logicalType > ZG_DEVICETYPE_ENDDEVICE) || //可以判断if 里面语句为0,执行else #if !ZG_BUILD_ENDDEVICE_TYPE // Only RTR or Coord possible. (logicalType == ZG_DEVICETYPE_ENDDEVICE) || #endif #if !ZG_BUILD_RTR_TYPE // Only End Device possible. (logicalType == ZG_DEVICETYPE_ROUTER) || (logicalType == ZG_DEVICETYPE_COORDINATOR) || #elif ZG_BUILD_RTRONLY_TYPE // Only RTR possible. (logicalType == ZG_DEVICETYPE_COORDINATOR) || #elif !ZG_BUILD_JOINING_TYPE // Only Coord possible. (logicalType == ZG_DEVICETYPE_ROUTER) || #endif (0)) { logicalType = ZB_INVALID_PARAMETER; SAPI_SendCback(SAPICB_START_CNF, logicalType, 0); } else { logicalType = ZB_SUCCESS; //将设备类型改为ZB_SUCCESS ZDOInitDevice(zgStartDelay); // 执行初始化设备函数。 } return; } 那么接下来去初始化设备函数中看一下,右键,go to definition uint8 ZDOInitDevice( uint16 startDelay ) { uint8 networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE; //首先更改了网络状态为初始化新网络状态 uint16 extendedDelay = 0; if ( devState == DEV_HOLD ) { zgInitItems( FALSE ); } ZDConfig_InitDescriptors(); _NIB.CapabilityInfo = ZDO_Config_Node_Descriptor.CapabilityFlags; devState = DEV_INIT; // 设备状态改为初始化 ZDApp_LeaveCtrlInit(); //离开控制初始化 ZDApp_LeaveCtrlStartup( &devState, &startDelay );//检查离开控制时的一些设置 if ( devState == DEV_HOLD ) { zgWriteStartupOptions( ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE ); osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT ); return ( ZDO_INITDEV_LEAVE_NOT_STARTED ); } #if defined ( NV_RESTORE ) //NV_RESTORE 编译不通过,NV_RESTORE 主要是设置掉电再重新上电,参数是否保留 if ( HalKeyRead() == SW_BYPASS_NV ) networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE; else { networkStateNV = ZDApp_ReadNetworkRestoreState(); } if ( networkStateNV == ZDO_INITDEV_RESTORED_NETWORK_STATE ) { networkStateNV = ZDApp_RestoreNetworkState(); } else { NLME_InitNV(); NLME_SetDefaultNV(); } #endif if ( networkStateNV == ZDO_INITDEV_NEW_NETWORK_STATE ) { ZDAppDetermineDeviceType(); //确定设备类型 extendedDelay = (uint16)((NWK_START_DELAY + startDelay) + (osal_rand() & EXTENDED_JOINING_RANDOM_MASK)); } ZDApp_SecInit( networkStateNV );// 初始化设备对象的安全操作 ZDApp_NetworkInit( extendedDelay ); //进行网络的初始化 NLME_SetBroadcastFilter( ZDO_Config_Node_Descriptor.CapabilityFlags ); //网络层函数,代码看不到,看函数名字是设置广播地址掩码来支持广播过滤。不太明白这个。。。

相关推荐

sharepoint发生意外错误,求助!!!

电脑A和服务器B都在一个域中,我用电脑A登陆B的sharepoint网站提示输入账号你看下,B对脑可开通了来宾帐户访问的权限,如果还不行。你再Ping下对方
2023-07-09 11:18:352

c++程序老是报内存冲突的错误,求解决

熟悉又陌生的YUV...不清楚你的RGB信息是 3个字节存储1个像素点信息还是 4个字节存储1个像素点信息?这种常见的内存越界错误,其实很容易定位。在debug下,F5启动调试模式,程序会在出错出弹出 访问冲突提示框,我们选 Debug->window->callstack 可以查看当前的调用栈情况,然后根据call stack可以定位到出错位置。接着在出错位置处,通过查看比较各个变量的值,我们一般就能找到问题所在了。
2023-07-09 11:18:421

如何关闭 PHP 报错的 Call Stack

在php.ini上修改 display_errors的值为OFF就可以了然后重启web环境~
2023-07-09 11:18:491

JQuery错误Maximum call stack size exceeded

for (int j=0; j<l+i; j++)System.out.print(" ");for (int k=2*l-1-2*i; k>0; k--)String str=br.readLine();int m=Integer.parseInt(str);int count=0;for (int i=0; i<m; i++){
2023-07-09 11:18:573

用u盘启动工具制作u盘提示创建uD分区失败

我今天也遇到同样的问题了,把U盘在PC机上格式化一下就好了,供参考哦
2023-07-09 11:19:065

什么是线程

线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。线程是独立调度和分派的基本单位。线程可以为操作系统内核调度的内核线程,如Win32线程;由用户进程自行调度的用户线程,如Linux平台的POSIX Thread;或者由内核与用户进程,如Windows 7的线程,进行混合调度。同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)。一个进程可以有很多线程,每条线程并行执行不同的任务。线程特点1、轻型实体线程中的实体基本上不拥有系统资源,只是有一点必不可少的、能保证独立运行的资源。线程的实体包括程序、数据和TCB。线程是动态概念,它的动态特性由线程控制块TCB(Thread Control Block)描述。2、独立调度和分派的基本单位在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位。由于线程很“轻”,故线程的切换非常迅速且开销小(在同一进程中的)。3、可并发执行在一个进程中的多个线程之间,可以并发执行,甚至允许在一个进程中所有线程都能并发执行;同样,不同进程中的线程也能并发执行,充分利用和发挥了处理机与外围设备并行工作的能力。4、共享进程资源在同一进程中的各个线程,都可以共享该进程所拥有的资源,这首先表现在:所有线程都具有相同的地址空间(进程的地址空间),这意味着,线程可以访问该地址空间的每一个虚地址。此外,还可以访问进程所拥有的已打开文件、定时器、信号量机构等。由于同一个进程内的线程共享内存和文件,所以线程之间互相通信不必调用内核。
2023-07-09 11:19:281

在JavaScript中,“Uncaught RangeError: Maximum call stack size exceeded”如何解决?

在JavaScript中,“Uncaught RangeError: Maximum call stack size exceeded”如何解决?而回看二战以来历史,立陶宛明明曾经加入苏联。其成为苏联的一个加盟共和国后,苏联领土包括立陶宛一事,获得了联合国和国际社会的普遍认可。中国科学院院士、中国科学院古脊椎动物与古人类研究所研究员周忠和负责的“克拉通破坏与陆地生物演化”成为2016年首批获得该项资助的三个项目之一。他对《中国新闻周刊》说,该项目经费管理比较宽松,但问题是这种项目太稀缺了,这虽然是一种稳定支持的模式,但本质上仍是一类竞争性很强的项目。庄辞也认为,这类项目支持的比例非常小,仍是面向极少数人,目前竞争已趋白热化。
2023-07-09 11:19:451

我下了一个国王的恩赐:北方勇士-冰与火中文版 打不开,错误提示 ”Call stack functions:"

我觉得很有可能使visual C++ 的问题,运行环境装全了吗?DirectX9.0及以上visual C++ 2008net.framework 3.5及以上这三个是大多数游戏的运行环境
2023-07-09 11:19:581

怎么调用CALL 使CALL在堆栈里不平衡

中断INT过程:1.取得中断类型码2.把标志位压入栈中3.把CS压入栈中4.把IP压入栈中5.更改CS和IP,转到中断程序CALL:将当前IP或者CS和IP压入栈中,到底是把IP还是IP和CS压入栈中。就要看CALL后到底是一个字还是2个字的,如果是一个字的,就只把IP压入栈中,例如CALL AX;如果是两个字,就先把CS压入有栈中,再把IP压入栈中,例如CALL dword ptr 内存单元地址希望对你有帮助!
2023-07-09 11:20:051

计算机需要用到的英语术语词汇表

   计算机需要用到的英语术语词汇表   CPU(Center Processor Unit)中央处理单元   Main board主板   RAM(random access memory)随机存储器(内存)   ROM(Read Only Memory)只读存储器   Floppy Disk软盘   Hard Disk硬盘   CD-ROM光盘驱动器(光驱)   monitor监视器   keyboard键盘   mouse鼠标   chip芯片   CD-R光盘刻录机   HUB集线器   Modem= MOdulator-DEModulator,调制解调器   P-P(Plug and Play)即插即用   UPS(Uninterruptable Power Supply)不间断电源   BIOS(Basic-input-Output   System)基本输入输出系统   CMOS(Complementary Metal-Oxide-Semiconductor)互补金属氧化物半导体   setup安装   uninstall卸载   wizzard向导   OS(Operation Systrem)操作系统   OA(Office AutoMation)办公自动化   exit退出   edit编辑   copy复制   cut剪切   paste粘贴   删除   select选择   find查找   select all全选   replace替换   undo撤消   redo重做   program程序   license许可(证)   back前一步   next下一步   finish结束   folder文件夹   Destination Folder目的文件夹   user用户   click点击   double click双击   right click右击   settings设置   update更新   release发布   data数据   data base数据库   DBMS(Data Base Manege   System)数据库管理系统   view视图   插入   object对象   configuration配置   command命令   document文档   POST(power-on-self-test)电源自检程序   cursor光标   attribute属性   icon图标   service pack服务补丁   option pack功能补丁   Demo演示   short cut快捷方式   exception异常   debug调试   previous前一个   column行   row列   restart重新启动   text文本   font字体   size大小   scale比例   interface界面   function函数   access访问   manual指南   active激活   computer language计算机语言   menu菜单   GUI(graphical user interfaces )图形用户界面   template模版   page setup页面设置   password口令   code密码   print preview打印预览   zoom in放大   zoom out缩小   pan漫游   cruise漫游   full screen全屏   tool bar工具条   status bar状态条   ruler标尺   table表   paragraph段落   symbol符号   style风格   execute执行   graphics图形   image图像   Unix用于服务器的一种操作系统   Mac OS苹果公司开发的操作系统   OO(Object-Oriented)面向对象   virus病毒   file文件   open打开   colse关闭   new新建   save保存   exit退出   clear清除   default默认   LAN局域网   WAN广域网   Client/Server客户机/服务器   ATM( Asynchronous   Transfer Mode)异步传输模式   Windows NT微软公司的网络操作系统   Internet互联网   WWW(World Wide Web)万维网   protocol协议   HTTP超文本传输协议   FTP文件传输协议   Browser浏览器   homepage主页   Webpage网页   website网站   URL在Internet的WWW服务程序上   用于指定信息位置的.表示方法   Online在线   Email电子邮件   ICQ网上寻呼   Firewall防火墙   Gateway网关   HTML超文本标识语言   hypertext超文本   hyperlink超级链接   IP(Address)互联网协议(地址)   Search Engine搜索引擎   TCP/IP用于网络的一组通讯协议   Telnet远程登录   IE(Internet Explorer)探索者(微软公司的网络浏览器)   Navigator引航者(网景公司的浏览器)   multimedia多媒体   ISO国际标准化组织   ANSI美国国家标准协会   able 能   active file 活动文件   add watch 添加监视点   all files 所有文件   allrightsreserved 所有的权力保留   altdirlst 切换目录格式   andotherinFORMation 以及其它的信息   archivefileattribute 归档文件属性   assignto 指定到   autoanswer 自动应答   autodetect 自动检测   autoindent 自动缩进   autosave 自动存储   available on volume 该盘剩余空间   bad command 命令错   bad command or filename 命令或文件名错   batch parameters 批处理参数   binary file 二进制文件   binary files 二进制文件   Borland international borland国际公司   bottommargin 页下空白   bydate 按日期   byextension 按扩展名   byname 按名称   bytesfree 字节空闲   callstack 调用栈   casesensitive 区分大小写   centralpointsoftwareinc central point 软件股份公司   changedirectory 更换目录   changedrive 改变驱动器   changename 更改名称   characterset 字符集   checkingfor 正在检查   chgdrivepath 改变盘/路径   chooseoneofthefollowing 从下列中选一项   clearall 全部清除   clearallbreakpoints 清除所有断点   clearsanattribute 清除属性   clearscommandhistory 清除命令历史   clearscreen 清除屏幕   closeall 关闭所有文件   codegeneration 代码生成   colorpalette 彩色调色板   commandline 命令行   commandprompt 命令提示符   compressedfile 压缩文件   conventionalmemory 常规内存   copydiskette 复制磁盘   copyrightc 版权(c   createdospartitionorlogicaldosdrive 创建DOS分区或逻辑DOS驱动器   createextendeddospartition 创建扩展DOS分区   createprimarydospartition 创建DOS主分区   createsadirectory 创建一个目录   currentfile 当前文件   defrag 整理碎片   dele 删去   deltree 删除树   devicedriver 设备驱动程序   dialogbox 对话栏   directionkeys 方向键   directly 直接地   directorylistargument 目录显示变量   directoryof 目录清单   directorystructure 目录结构   diskaccess 磁盘存取   diskcopy 磁盘拷贝   diskspace 磁盘空间   displayfile 显示文件   displayoptions 显示选项   displaypartitioninFORMation 显示分区信息   dosshell DOS 外壳   doubleclick 双击   driveletter 驱动器名   editmenu 编辑选单   emsmemory ems内存   endoffile 文件尾   endofline 行尾   enterchoice 输入选择   entiredisk 转换磁盘   environmentvariable 环境变量   everyfileandsubdirectory 所有的文件和子目录   existingdestinationfile 已存在的目录文件时   expandedmemory 扩充内存   expandtabs 扩充标签   explicitly 明确地   extendedmemory 扩展内存   fastest 最快的   fatfilesystem fat 文件系统   fdiskoptions fdisk选项   fileattributes 文件属性   fileFORMat 文件格式   filefunctions 文件功能   fileselection 文件选择   fileselectionargument 文件选择变元   filesin 文件在   filesinsubdir 子目录中文件   fileslisted 列出文件
2023-07-09 11:20:121

汇编语言CALL指令都将什么压入堆栈?INT指令呢?

首先指令寄存器在16/32/64位下分别是IP,EIP,RIP,标志寄存器是FLAGS,EFLAGS,RFLAGS下面都以32位为例CALL将下一条指令的CS:EIP压入堆栈INT要看是什么模式,还有是否更改CPL,行为比较复杂,反正最后压入堆栈的三个是EFLAGS,CS和下一条指令的EIP具体可以参考Intel或AMD的文档
2023-07-09 11:20:302

汇编中未定义stack段 call命令执行后 cs ip放哪里

放在默认栈中。这个栈是不安全的,因为你实际不能操作它。
2023-07-09 11:20:395

MATLAB simulink中出现如下错误 怎么办

1、检查电脑是否存在病毒,请使用百度卫士进行木马查杀。2、系统文件损坏或丢失,盗版系统或ghost版本系统,很容易出现该问题。建议:使用完整版或正版系统。3、安装的软件与系统或其它软件发生冲突,找到发生冲突的软件,卸载。如果更新下载补丁不是该软件的错误补丁,也会引起软件异常,解决办法:卸载该软件,重新下载重新安装试试。顺便检查开机启动项,把没必要启动的启动项禁止开机启动。扩展资料:1、硬件本身质量不佳。粗糙的生产工艺、劣质的制作材料、非标准的规格尺寸等都是引发故障的隐藏因素。由此常常引发板卡上元件焊点的虚焊脱焊、插接件之间接触不良、连接导线短路断路等故障。2、人为因素影响。操作人员的使用习惯和应用水平也不容小觑,例如带电插拔设备、设备之间错误的插接方式、不正确的BIOS参数设置等均可导致硬件故障。3、使用环境影响。这里的环境可以包括温度、湿度、灰尘、电磁干扰、供电质量等方面。每一方面的影响都是严重的,例如过高的环境温度无疑会严重影响设备的性能等等。4、其他影响。由于设备的正常磨损和硬件老化也常常引发硬件故障。
2023-07-09 11:20:561

我的魔兽大脚插件一直出现错误信息,怎么办啊?

出现错误信息,是用插件经常出现的问题。通常采用先点屏蔽错误,再点关闭。如果在出现一样这么处理。这通常是插件内部的问题,可以采用删除插件,在重新加载插件。如果不行可以等下次插件更新。(其实这种错误,对游戏影响不大,没必要理会).
2023-07-09 11:21:111

魔兽世界出现断网~插件显示如下

从语句上来看应该是有BUFF框架引起的大脚错误,这个没有办法,要么你把interface都删掉,要么就是等大脚更新,现阶段大脚问题很多,这个也是没有办法的,要么不用插件,要么自己整合,要么下多玩或者月光,或者是NGA上各位大大的插件包,就这几种办法了,首先要把插件删干净~
2023-07-09 11:21:181

巫师2错误,弹出框显示如下

第一步,调节画面,调完不要打开游戏。第二步,到我的文档witcher2的config文件夹里有个user.ini,打开,在第一行[Engine]多加一个[,也就是有两个[了,保存,然后右键点击user.ini,勾选只读,然后再进入游戏,搞定。
2023-07-09 11:21:251

QQ登陆 遇到未知的错误

意思是:你的号被网上警察封了
2023-07-09 11:21:334

迅雷不断崩溃怎么办

去下5.8版本的旧的,新的很多人都讲不好用
2023-07-09 11:21:536

JavaScript错误提示:Maximum call stack size exceeded

second方法里的 setTimeout(second(),1000); 改成 setTimeout(second,1000);试试看
2023-07-09 11:22:093

Java中在线程中再开线程,可以么

对于进程最直观的感受应该就是“windows任务管理器”中的进程管理:(计算机原理课上的记忆已经快要模糊了,简单理解一下):一个进程就是一个“执行中的程序”,是程序在计算机上的一次运行活动。程序要运行,系统就在内存中为该程序分配一块独立的内存空间,载入程序代码和资源进行执行。程序运行期间该内存空间不能被其他进程直接访问。系统以进程为基本单位进行系统资源的调度和分配。何为线程?线程是进程内一次具体的执行任务。程序的执行具体是通过线程来完成的,所以一个进程中至少有一个线程。回忆一下 HelloWrold 程序中main方法的执行,其实这时候,Java虚拟机会开启一个名为“main”的线程来执行程序代码。一个进程可以包含多个线程,这些线程共享数据空间和资源,但又分别拥有各自的执行堆栈和程序计数器。线程是CPU调度的基本单位。多线程一个进程包含了多个线程,自然就叫做多线程。拥有多个线程就可以让程序看起来可以“同时”处理多个任务,为什么是看起来呢?因为CPU也分身乏术,只能让你这个线程执行一会儿,好了你歇着,再让另一个线程执行一会儿,下次轮到你的时候你再继续执行。这里的“一会儿”实际上时间非常短,感觉上就是多个任务“同时”在执行。CPU就这样不停的切来切去…既然CPU一次也只能执行一个线程,为什么要使用多线程呢?当然是为了充分利用CPU资源。一个线程执行过程中不可能每时每刻都在占用CPU,CPU歇着的时候我们就可以让它切过来执行其他的线程。Java中的多线程Java中启用多线程有两种方式:①继承Thread类;②实现Runnable接口。There are two ways to create a new thread of execution. One is to declare a class to be a subclass of Thread. This subclass should override the run method of class Thread. An instance of the subclass can then be allocated and started.The other way to create a thread is to declare a class that implements the Runnable interface. That class then implements the run method. An instance of the class can then be allocated, passed as an argument when creating Thread, and started. 继承Thread类创建一个类,继承java.lang.Thread,并覆写Thread类的run()方法,该类的实例就可以作为一个线程对象被开启。/*** Dog类,继承了Thread类* @author lt*/class Dog extends Thread {/** 覆写run()方法,定义该线程需要执行的代码*/@Overridepublic void run() {for (int i = 0; i < 10; i++) {System.out.println(i);}}}线程创建好了,怎么让它作为程序的一个独立的线程被执行呢?创建一个该类的实例,并调用start()方法,将开启一个线程,并执行线程类中覆写的run()方法。public class ThreadDemo {public static void main(String[] args) {Dog dog = new Dog();dog.start();}}看不出什么端倪,如果我们直接调用实例的run()方法,执行效果是完全一样的,见上图。public class ThreadDemo {public static void main(String[] args) {Dog dog = new Dog();dog.run();}}如果一切正常,这时候程序中应该有两个线程:一个主线程main,一个新开启的线程。run()方法中的代码究竟是哪个线程执行的呢?Java程序中,一个线程开启会被分配一个线程名:Thread-x,x从0开始。我们可以打印当前线程的线程名,来看看究竟是谁在执行代码。class Dog extends Thread {@Overridepublic void run() {for (int i = 0; i < 10; i++) {System.out.println("当前线程:" + Thread.currentThread().getName() + "---" + i);}}}public class ThreadDemo {public static void main(String[] args) {System.out.println("当前线程:" + Thread.currentThread().getName());Dog dog = new Dog();dog.start();}}可以看到,确实开启了一个新的线程:Thread-0,main()方法的线程名就叫main。同一个实例只能调用一次start()方法开启一次,多次开启,将报java.lang.IllegalThreadStateException异常:我们再创建一个实例,开启第三个线程:public class ThreadDemo {public static void main(String[] args) {System.out.println("当前线程:" + Thread.currentThread().getName());Dog dog = new Dog();Dog dog2 = new Dog();dog.start();dog2.start();}}这时候我们已经能够看到多线程的底层实现原理:CPU切换处理、交替执行的效果了。run和start上面我们直接调用run()方法和调用start()方法的结果一样,现在我们在打印线程名的情况下再来看看:public class ThreadDemo {public static void main(String[] args) {System.out.println("当前线程:" + Thread.currentThread().getName());Dog dog = new Dog();Dog dog2 = new Dog();dog.run();dog2.run();}}可以看到,这时候并没有开启新的线程,main线程直接调用执行了run()方法中的代码。所以start()方法会开启新的线程并在新的线程中执行run()方法中的代码,而run()方法不会开启线程。查看start()的源代码,该方法调用了本地方法 private native void start0();即调用的是操作系统的底层函数:public synchronized void start() {if (threadStatus != 0)throw new IllegalThreadStateException();group.add(this);boolean started = false;try {start0();started = true;} finally {try {if (!started) {group.threadStartFailed(this);}} catch (Throwable ignore) {/* do nothing. If start0 threw a Throwable thenit will be passed up the call stack */}}}private native void start0();实现Runnable接口第二种方式,实现Runnable接口,并覆写接口中的run()方法,这是推荐的也是最常用的方式。Runnable接口定义非常简单,就只有一个抽象的run()方法。//Runnable接口源码public interface Runnable {public abstract void run();}class Dog implements Runnable {@Overridepublic void run() {for (int i = 0; i < 10; i++) {System.out.println("当前线程:" + Thread.currentThread().getName() + "---" + i);}}}这时候的Dog类看起来跟线程什么的毫无关系,也没有了start()方法,怎么样开启一个新的线程呢?直接调用run()方法?想想也不行。这时候我们需要将一个Dog类的实例,作为Thread类的构造函数的参数传入,来创建一个Thread类的实例,并通过该Thread类的实例来调用start()方法从而开启线程。public class ThreadDemo {public static void main(String[] args) {System.out.println("当前线程:" + Thread.currentThread().getName());Dog dog = new Dog();Thread thread = new Thread(dog);thread.start();}}这时候如果要开启第三个线程,需要创建一个新的Thread类的实例,同时传入刚才的Dog类的实例(当然也可以创建一个新的Dog实例)。这时候我们就可以看到跟继承Thread类的方式的区别:多个线程可以共享同一个Dog类的实例。public class ThreadDemo {public static void main(String[] args) {System.out.println("当前线程:" + Thread.currentThread().getName());Dog dog = new Dog();Thread thread = new Thread(dog);Thread thread2 = new Thread(dog);thread.start();thread2.start();}}两种方式的比较继承Thread类的方式有它固有的弊端,因为Java中继承的单一性,继承了Thread类就不能继承其他类了;同时也不符合继承的语义,Dog跟Thread没有直接的父子关系,继承Thread只是为了能拥有一些功能特性。而实现Runnable接口,①避免了单一继承的局限性,②同时更符合面向对象的编程方式,即将线程对象进行单独的封装,③而且实现接口的方式降低了线程对象(Dog)和线程任务(run方法中的代码)的耦合性,④如上面所述,可以使用同一个Dog类的实例来创建并开启多个线程,非常方便的实现资源的共享。实际上Thread类也是实现了Runnable接口。实际开发中多是使用实现Runnable接口的方式。
2023-07-09 11:22:161

maximum call stack size exceeded怎么解决

可以对WINDOW窗体的onerror事件做出操作,具体请参考以下代码:window.onerror=function (){return true;}注:此代码一定要放在所有JS脚本代码前,否则是不会起作用的。
2023-07-09 11:22:241

iOS与多线程(十) —— NSThread的使用以及锁(一)

首先看下写作环境 NSThread 位于 Foundation 库中,是对 pthread 对象化的封装,首先看一下苹果给的API,后续会根据这些进行详细的说明。 这个是类可以直接访问的属性,使用的使用直接类方法调用就可以 [NSThread currentThread] 。 使用示例 用于判断是否是多线程 使用示例 下面看一下输出 每个线程都维护了一个键-值的字典,它可以在线程里面的任何地方被访问。你可以使用该字典来保存一些信息,这些信息在整个线程的执行过程中都保持不变。比如你可以使用它来存储在你的整个线程过程中 Run loop 里面多次迭代的状态信息。 使用示例 下面看一下输出 下面看一下线程优先级的设置 这里,iOS 8.0以后 threadPriority 已经被废弃了,用 qualityOfService 替换,这个是一个枚举,在线程start以后,就变为只读属性了。 使用示例 主线程名字默认为 main ,子线程如果不指定就为空。 使用示例 callStackReturnAddresses 线程的调用都会有函数的调用函数的调用就会有栈返回地址的记录,在这里返回的是函 数调用返回的虚拟地址,说白了就是在该线程中函数调用的虚拟地址的数组。 使用示例 同上面的方法一样,只不过返回的是该线程调用函数的名字数字。 使用示例 isMainThread 用来判断该线程是否是主线程,而 mainThread 用来获取当前的主线程。 使用示例 对象方法创建 下面看一下线程的初始化 类方法创建 下面就是使用示例 下面是输出 隐式创建 下面就是线程的状态控制 isExecuting 判断线程是否正在执行, isFinished 判断线程是否已经结束, isCancelled 判断线程是否撤销。 这个是线程的入口函数。 在程序运行过程中,如果存在多线程,那么各个线程读写资源就会存在先后、同时读写资源的操作,因为是在不同线程,CPU调度过程中我们无法保证哪个线程会先读写资源,哪个线程后读写资源。因此为了防止数据读写混乱和错误的发生,我们要将线程在读写数据时加锁,这样就能保证操作同一个数据对象的线程只有一个,当这个线程执行完成之后解锁。 常用的锁有下面几种 下面就是一个卖票的示例,用来说明互斥锁的作用 下面看一下输出 首先看一下API 下面我们换成NSLock看一下 接着看一下输出 NSConditionLock 用于需要根据一定条件满足后进行 加锁/解锁. 首先看下API 下面就看一下适用场景 此锁可以在同一线程中多次被使用,但要保证加锁与解锁使用平衡,多用于递归函数,防止死锁。 首先看下API文档 下面看这个示例,其实就是递归使用这个锁 看一下输出 前面四种都是互斥锁,这里和自旋锁有什么区别和联系呢? 共同点 不同点
2023-07-09 11:22:301

Vc2010下编译通过,但是运行时出现:Debug Assertion Failed!

我也想知道
2023-07-09 11:22:382

oracle expdp导出报错“字符串缓冲区太小”

你没有ORACLE账户吧,你公司要是买了付费ORACLE会给账号的,你去要一个,我把里面关于这个的文章粘给你,不给你翻译了挺长的。你看看Symptoms应该是你这个问题,在你的11.2.0.1.0是可以发生的。后面有SolutionSymptomsAll of a sudden, your data pump export jobs all fail with the following bunch of errors:Export: Release 11.2.0.3.0 - Production on Sunday, Apr 28, 22:00:26 2013Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit ProductionWith the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,Data Mining and Real Application Testing optionsORA-31626: Job does not existORA-31638: cannot attach to job Your_JOBNAME for user SYSTEMORA-06512: at "SYS.DBMS_SYS_ERROR", line 95ORA-06512: at "SYS.KUPV$FT_INT", line 428ORA-39077: unable to subscribe agent KUPC$A_4_220050709685000 to queue "KUPC$C_4_20130428220032"ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95ORA-06512: at "SYS.KUPC$QUE_INT", line 250ORA-06502: PL/SQL: numeric or value error: character string buffer too smallSolutionInitially, Oracle Development built a fix under Patch 16473783.We found out that the fix was incomplete and needed to be re-written.This is under progress and monitored via unpublished Bug 16928674.After encountering this symptom, this is not resolved unless recreating of datapump like followings. @$ORACLE_HOME/rdbms/admin/catdph.sql @$ORACLE_HOME/rdbms/admin/prvtdtde.plb @$ORACLE_HOME/rdbms/admin/catdpb.sql @$ORACLE_HOME/rdbms/admin/dbmspump.sql @$ORACLE_HOME/rdbms/admin/utlrp.sqlGenerally speaking, we can recreate the datapump objects in 11g by calling;1. Catproc.sql SQL> @$ORACLE_HOME/rdbms/admin/catproc.sql2. To recompile invalid objects, if any SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sqlThis is described in Note 430221.1 How To Reload Datapump Utility EXPDP/IMPDP
2023-07-09 11:22:451

如何分析Thread Dump

当Java Web程序运行变慢,或者发生故障时,需要使用Thread Dumps. 如果你觉得ThreadDumps非常复杂,这篇文章很可能帮助你。将会分析Java中的线程,线程如何创建的,如何管理线程,怎么从运行中的程序中dump 线程,最后怎么分析他们得到阻塞和存在瓶颈的线程。本文是在应用程序调试下得到的结果。Java和线程 一个web server使用几十到几百条线程去处理大量的并发用户。如果多条线程使用共享的资源,无法避免线程之间对数据的竞争,有时候还会发生死锁。 线程竞争是web程序上不同的线程去访问共享资源,一条线程等待另外线程释放锁。例如,在记录log的时候,线程记录log时,必须先获得锁,然后去再访问共享资源。 死锁是一种特殊的线程竞争,两个或多个线程要完成自己的任务,都要必须要等待其他的线程完成他们的任务。 线程竞争会带来各种不同的问题,为了分析这些问题,需要使用Thread Dump。Thread Dump记录了每个线程真正的状态。 Java线程的背景 线程同步 多条线程之间可以同时执行,为了确保多线程在使用共享资源上面的通用性,使用线程同步保证在同一时间只能有一条线程可以访问共享资源。 线程同步在Java中可以使用监视器。每个Java对象都有一个监视器,这个监视器只能被一个线程拥有。当一个线程要获得另外线程拥有的监视器时,需要进入等待队列直到线程释放监视器。 线程的状态 为了分析Thread Dump ,需要先了解线程的状态。线程的状态是在java.lang.Thread.State中。NEW:线程被创建但是还没有被执行RUNNABLE:线程正在占用cpu并且在执行任务BLOCKED:线程为了获得监视器需要等待其他线程释放锁WAITING:调用了wait,join,park方法使线程等待-无限期等待TIMED_WAITING:调用了sleep,wait,join,park方法使线程等待--有限期等待线程类型java中线程可以分为两种: 1. 后台线程 2. 非后台线程当没有其他的非后台线程运行时后台线程将会终止。即使你不创建线程,java应用默认也会创建很多线程。这些大多数都是后台线程,主要为了执行gc或者jmx等类型的任务从 "static void main(String[] args)"方法中开启的线程叫做非后台线程,当这些线程停止时,其他的所有后台线程也会停止()获得一个Thread Dump将会介绍三种常用的方法。请注意还会有其他很多方法可以获取Thread Dump。一个Thread dump仅仅可以显示测量时的线程状态。所以为了查看线程状态的变化,建议5到10次,每次间隔5秒。使用jstack获得Thread Dump通过使用jsp命令来获得当前正在运行的Java程序的PID[user@linux ~]$ jps -v 25780 RemoteTestRunner -Dfile.encoding=UTF-8 25590 sub.rmi.registry.RegistryImpl 2999 -Dapplication.home=/home1/user/java/jdk.1.6.0_24 -Xms8m 26300 sun.tools.jps.Jps -mlvV -Dapplication.home=/home1/user/java/jdk.1.6.0_24 -Xms8m使用PID作为jstack的参数获得Thread Dump[user@linux ~]$ jstack -f 5824使用jVisualVM获得Thread Dump通过使用jVisualVm来获得Thread Dump左边的标记,当前正在运行的进程。点击你想查看的进程,选择现场选项来查看实时的线程信息。点击Thread Dump右边的按钮来获得Thread Dump文件在Linux终端中生成通过使用ps -ef命令去获得当前正在运行的Java进程[user@linux ~]$ ps - ef | grep javauser 2477 1 0 Dec23 ? 00:10:45 ...user 25780 25361 0 15:02 pts/3 00:00:02 ./jstatd -J -Djava.security.policy=jstatd.all.policy -p 2999user 26335 25361 0 15:49 pts/3 00:00:00 grep javaUse the extracted pid as the parameter of kill –SIGQUIT(3) to obtain a thread dump.Thread Information from the Thread Dump File"pool-1-thread-13" prio=6 tid=0x000000000729a000 nid=0x2fb4 runnable [0x0000000007f0f000] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264) at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158) - locked <0x0000000780b7e688> (a java.io.InputStreamReader) at java.io.InputStreamReader.read(InputStreamReader.java:167) at java.io.BufferedReader.fill(BufferedReader.java:136) at java.io.BufferedReader.readLine(BufferedReader.java:299) - locked <0x0000000780b7e688> (a java.io.InputStreamReader) at java.io.BufferedReader.readLine(BufferedReader.java:362)Thread name:当使用 Java.lang.Thread类去生成一个线程,将被命名为Thre-(Number),然而当使用java.util.concurrent,ThreadFactory类,将会被命名为pool-(Number)-thread-(Number)Priority:表示线程的优先级Thread ID:代表线程的唯一id。(通过线程id可以获得一些有用的信息,包括cpu使用率,或者内存使用率)Thread status:代表线程的状态Thread callstack:代表线程调用的堆栈信息Thread Dump模式的类型当无法获得一个锁(阻塞)当一个线程占领住锁而其他线程无法获得这个锁,而导致应用程序所有的性能都下降。在下面的例子中,BLOCKED_TEST pool-1-thread-1 线程运行时获得<0x0000000780a000b0>锁, 同时BLOCKED_TEST pool-1-thread-2 和 BLOCKED_TEST pool-1-thread-3正在等待获得<0x0000000780a000b0>锁"BLOCKED_TEST pool-1-thread-1" prio=6 tid=0x0000000006904800 nid=0x28f4 runnable [0x000000000785f000] java.lang.Thread.State: RUNNABLE at java.io.FileOutputStream.writeBytes(Native Method) at java.io.FileOutputStream.write(FileOutputStream.java:282) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65) at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123) - locked <0x0000000780a31778> (a java.io.BufferedOutputStream) at java.io.PrintStream.write(PrintStream.java:432) - locked <0x0000000780a04118> (a java.io.PrintStream) at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202) at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272) at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:85) - locked <0x0000000780a040c0> (a java.io.OutputStreamWriter) at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:168) at java.io.PrintStream.newLine(PrintStream.java:496) - locked <0x0000000780a04118> (a java.io.PrintStream) at java.io.PrintStream.println(PrintStream.java:687) - locked <0x0000000780a04118> (a java.io.PrintStream) at com.nbp.theplatform.threaddump.ThreadBlockedState.monitorLock(ThreadBlockedState.java:44) - locked <0x0000000780a000b0> (a com.nbp.theplatform.threaddump.ThreadBlockedState) at com.nbp.theplatform.threaddump.ThreadBlockedState$1.run(ThreadBlockedState.java:7) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - <0x0000000780a31758> (a java.util.concurrent.locks.ReentrantLock$NonfairSync) "BLOCKED_TEST pool-1-thread-2" prio=6 tid=0x0000000007673800 nid=0x260c waiting for monitor entry [0x0000000008abf000] java.lang.Thread.State: BLOCKED (on object monitor) at com.nbp.theplatform.threaddump.ThreadBlockedState.monitorLock(ThreadBlockedState.java:43) - waiting to lock <0x0000000780a000b0> (a com.nbp.theplatform.threaddump.ThreadBlockedState) at com.nbp.theplatform.threaddump.ThreadBlockedState$2.run(ThreadBlockedState.java:26) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - <0x0000000780b0c6a0> (a java.util.concurrent.locks.ReentrantLock$NonfairSync) "BLOCKED_TEST pool-1-thread-3" prio=6 tid=0x00000000074f5800 nid=0x1994 waiting for monitor entry [0x0000000008bbf000] java.lang.Thread.State: BLOCKED (on object monitor) at com.nbp.theplatform.threaddump.ThreadBlockedState.monitorLock(ThreadBlockedState.java:42) - waiting to lock <0x0000000780a000b0> (a com.nbp.theplatform.threaddump.ThreadBlockedState) at com.nbp.theplatform.threaddump.ThreadBlockedState$3.run(ThreadBlockedState.java:34) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - <0x0000000780b0e1b8> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)当是死锁的状态线程A需要获得线程B的锁才能继续执行任务,同时线程B需要获得线程A的锁才能继续执行任务。在Thread Dump中,可以发现 DEADLOCK_TEST-1 线程拥有0x00000007d58f5e48锁,并且试着去获取0x00000007d58f5e60这把锁。另外 DEADLOCK_TEST-2 线程拥有0x00000007d58f5e60锁,并且尝试获取0x00000007d58f5e78锁。,DEADLOCK_TEST-3 线程拥有0x00000007d58f5e78锁,并且尝试获得0x00000007d58f5e48锁。可以看得出来,每个线程都在等待另外线程的锁,这种状态知道一个线程放弃锁之前都不会被改变。"DEADLOCK_TEST-1" daemon prio=6 tid=0x000000000690f800 nid=0x1820 waiting for monitor entry [0x000000000805f000] java.lang.Thread.State: BLOCKED (on object monitor) at com.nbp.theplatform.threaddump.ThreadDeadLockState$DeadlockThread.goMonitorDeadlock(ThreadDeadLockState.java:197) - waiting to lock <0x00000007d58f5e60> (a com.nbp.theplatform.threaddump.ThreadDeadLockState$Monitor) at com.nbp.theplatform.threaddump.ThreadDeadLockState$DeadlockThread.monitorOurLock(ThreadDeadLockState.java:182) - locked <0x00000007d58f5e48> (a com.nbp.theplatform.threaddump.ThreadDeadLockState$Monitor) at com.nbp.theplatform.threaddump.ThreadDeadLockState$DeadlockThread.run(ThreadDeadLockState.java:135) Locked ownable synchronizers: - None "DEADLOCK_TEST-2" daemon prio=6 tid=0x0000000006858800 nid=0x17b8 waiting for monitor entry [0x000000000815f000] java.lang.Thread.State: BLOCKED (on object monitor) at com.nbp.theplatform.threaddump.ThreadDeadLockState$DeadlockThread.goMonitorDeadlock(ThreadDeadLockState.java:197) - waiting to lock <0x00000007d58f5e78> (a com.nbp.theplatform.threaddump.ThreadDeadLockState$Monitor) at com.nbp.theplatform.threaddump.ThreadDeadLockState$DeadlockThread.monitorOurLock(ThreadDeadLockState.java:182) - locked <0x00000007d58f5e60> (a com.nbp.theplatform.threaddump.ThreadDeadLockState$Monitor) at com.nbp.theplatform.threaddump.ThreadDeadLockState$DeadlockThread.run(ThreadDeadLockState.java:135) Locked ownable synchronizers: - None "DEADLOCK_TEST-3" daemon prio=6 tid=0x0000000006859000 nid=0x25dc waiting for monitor entry [0x000000000825f000] java.lang.Thread.State: BLOCKED (on object monitor) at com.nbp.theplatform.threaddump.ThreadDeadLockState$DeadlockThread.goMonitorDeadlock(ThreadDeadLockState.java:197) - waiting to lock <0x00000007d58f5e48> (a com.nbp.theplatform.threaddump.ThreadDeadLockState$Monitor) at com.nbp.theplatform.threaddump.ThreadDeadLockState$DeadlockThread.monitorOurLock(ThreadDeadLockState.java:182) - locked <0x00000007d58f5e78> (a com.nbp.theplatform.threaddump.ThreadDeadLockState$Monitor) at com.nbp.theplatform.threaddump.ThreadDeadLockState$DeadlockThread.run(ThreadDeadLockState.java:135) Locked ownable synchronizers: - None持续等待来自远程服务的信息线程看起来是正常的,因为它的状态一直都是RUNNABLE,然而当你将thread dump按时间有序的排列,你可以看出来socketReadThread线程一直在读socket
2023-07-09 11:22:531

QQ运行一段时间后就自动弹出,报错为Type: EXCEPTION_ACCESS_VIOLATION,是咋回事?

可能是木马插件作怪。,用软件扫描下,如果没问题将QQ卸载重装。
2023-07-09 11:23:001

Call Stack窗口是怎么显示出来的

首先要进入调试状态(F5),VC6.0 在菜单栏或工具栏右键便可以看到调试窗口( watch Window、call stack Window、...)。如果是VC8.0或者VC9.0在菜单debug=〉windows下面可以找到。
2023-07-09 11:23:181

Fatal error: Call to undefined function get_header() in C:wampwwwindex.php on line 1 Call Stack

上面的错误提示是说,get_header()这个函数没有定义,据此,以下建议可供参考:1.检查这个函数是否是拼写错误在php里,内置有get_headers()函数,该函数的功用是:返回一个数组,包含有服务器响应一个http请求所发送的标头。如果失败则返回false并发出一条e_warning级别的错误信息2.检查是否在其它地方定义了这个函数如果定义,请将这个函数引入。
2023-07-09 11:23:251

Maximum call stack size exceeded 问题出现原因是什么

Maximum call stack size exceeded这个错误其实很直白,就是你程序代码堆栈调用超出了系统最大限制了。就是你不能这么一直调用【TS。DM】
2023-07-09 11:23:321

洛奇游戏BUG

分类: 电脑/网络 问题描述: client.exe caused an EXCEPTION_ACCESS_VIOLATIONin module Renderer2.dll at 001B:65F06203, pleione::rc_mesh2::Transform()+0x3d<system>OS : Microsoft Windows XP, Service Pack 2CPU : GenuineIntel, Intel(R) Pentium(R) D CPU 2.80GHz, 2810Mhz x2Video Adapter : NVIDIA GeForce 7300 GT (4318[0x10de]/915[0x393]/6.14.10.9136)Memory : 1023MBDate/Time : 2006/08/20, 20:28:38Version : 34Account : "yuyuxrx", (4503599627530115)<registers>EAX=25F92974 EBX=06AF4388 ECX=13CA06C0 EDX=0EE68300 ESI=618442DBEDI=*********** EBP=0012F7B4 ESP=0012F748 EIP=65F06203 FLG=***********CS=001B DS=0023 SS=0023 ES=0023 FS=003B GS=0000<call stack>[65F06203] Renderer2.dll::pleione::rc_mesh2::Transform() + 0x3d[65F080DF] Renderer2.dll::pleione::CRC_Mesh::_Transform() + 0x51[65E9AECE] Renderer2.dll::pleione::CActor::Transform() + 0x15[65E9AECE] Renderer2.dll::pleione::CActor::Transform() + 0x15[3F800000] <unknown module>::<unknown symbol>() + 0x0有没有高手能告诉我怎么解决??? 解析: 洛奇的许多程序都不完善,我也有过这事,天成的质量。。。。汗
2023-07-09 11:23:381

Keil的Vision4版本如何找到watch&call stack window

调试的时候在view下拉菜单里面
2023-07-09 11:23:471

Jquery出错:Uncaught RangeError: Maximum call stack size exceeded

不太懂你这个函数为什么会报错,我copy你的本地调试,什么错误提示都没有但是我要提下:1、你的html写法不标准,a标签不能直接嵌套在ul里头的2、可能是onclick是关键字,直接写函数有误,我本地是点击直接没反应,alert也没反应3、属性选择器有误li[display="block"],这个选择不到,li[style*="block"]应该这么写才对经修改方案如下:<script type="text/javascript"> function onc(){ //alert($("#a").text()) var more = $("a"); if(more.html()=="更多"){ $("li:hidden").css("display","block"); more.html("简化"); return; } if(more.html()=="简化"){ $("li[style*="block"]").css("display","none"); more.html("更多"); return; } }</script><ul> <li style="display:none">第1个li</li> <li>第2个li</li> <li style="display:none">第3个li</li> <li>第4个li</li> <li style="display:none">第5个li</li> <li>第6个li</li> <li>第7个li</li> <li>第8个li</li></ul><a href="#" id="a" onclick="onc()">更多</a>
2023-07-09 11:24:002

keil C51 callstack+locals 窗口 函数前面的加号点不开,请问哪位大神给指点下。 这是最新版本的

http://www.21ic.com/jszt/keil.htmkeil C51 资料,或许对你以后得学习有帮助!
2023-07-09 11:24:191

求大神 C++ 接口 转成java方法

提供思路:1: 用Java对这些方法重写2: 使用JNI,调用C++代码
2023-07-09 11:24:281

汇编语言中中断INT和子程序调用CALL保护现场时分别压入堆栈的是什么?

int指令相当于pushfpush cspush ipjmp xxxx:xxxxcall指令不保存标志寄存器call分为远调用和进调用远调用压入段寄存器和返回地址近调用只压入返回地址
2023-07-09 11:24:363

ext-all.js:7 Uncaught RangeError: Maximum call stack size exceeded

估计是在尝试做Ext.JSON.encode(dataArray);类似这样的encode操作吧?如果是的话需要改成for循环数组来封装元数据
2023-07-09 11:24:451

为什么我QQ一登录就发送错误报告 就掉线了?

你这个是QQ程序出错了。1.卸载QQ.在卸载QQ时,要去c:program files encentQQ目录下,把所有文件都删除,2.用优化大师清理一下注册表,重装QQ。
2023-07-09 11:25:032

visualstudiocode颜色代码起冲突的时候优先于哪个

准备两个 Gitee 账号2. A账号使用VS Code处理代码,B账号使用 记事本处理代码3.两个账号都拉取最新代码4.模拟 A , B 两账号,修改相同的文件,并且 B 要在 A之前提交,让 A不能正常拉取代码5. B账号修改代码,并推送远程库
2023-07-09 11:25:124

我安装国王的恩赐 交错世界 点进去就黑了 切换出来就出现了个报错。。 想问下怎么回事 我买的是正版的。。

文件名全改成英文试试
2023-07-09 11:25:193

ORACLE数据库 ORA-00600 [ktubko_1] 错误,请问如何解决。

建议你参考http://www.xifenfei.com/3336.html
2023-07-09 11:25:273

什么是堆和栈?函数压栈是怎么回事?

堆 heap栈 stack是两种不同的数据结构stack的特点是先入后出 就像叠盘子 先放上去的盘子后拿走(底里的抽不出来自然最后才能拿走)stack和heap放在一起讨论的话 其实不是讲的数据结构了 是说操作系统给程序分配内存的方式对于一个程序来说 运行的时候 系统分配了一定内存给它 其中一块叫堆 一块叫栈堆里面主要放 动态分配的内容 比如c里面用 malloc 分配到的空间 就在堆里 c++里面用new 分配到的也在堆里栈里面放 函数的局部变量 一个函数的局部变量 会在这个函数被调用时push到栈里 这个函数返回的时候才从栈里面pop出来栈的先入后出的顺序使得函数可以嵌套 递归 如果递归层数太多 栈也会满 就会出现栈溢出……
2023-07-09 11:25:342

请哪位高人帮我把这段C语言代码转换成MIPS汇编语言

1 .file "6.c"2 .section .rodata3 .LC0:4 .string "350257267350276223345205245344270200344270252345255227347254246344270262:"5 .align 86 .LC1:8 .text9 .globl main10 .type main, @function11 main:12 .LFB0:13 .cfi_startproc14 pushq %rbp15 .cfi_def_cfa_offset 1616 .cfi_offset 6, -1617 movq %rsp, %rbp18 .cfi_def_cfa_register 619 addq $-128, %rsp20 movq %fs:40, %rax21 movq %rax, -8(%rbp)22 xorl %eax, %eax23 leaq -112(%rbp), %rdx24 movl $0, %eax25 movl $12, %ecx26 movq %rdx, %rdi27 rep stosq28 movq %rdi, %rdx29 movl %eax, (%rdx)30 addq $4, %rdx31 movl $0, -116(%rbp)32 movl $.LC0, %edi33 call puts34 leaq -112(%rbp), %rax35 movq %rax, %rdi36 call gets37 movl $0, -120(%rbp)38 jmp .L239 .L5:40 movl -120(%rbp), %eax41 cltq42 movzbl -112(%rbp,%rax), %eax43 cmpb $96, %al44 jle .L345 movl -120(%rbp), %eax46 cltq47 movzbl -112(%rbp,%rax), %eax48 cmpb $122, %al49 jle .L450 .L3:51 movl -120(%rbp), %eax52 cltq53 movzbl -112(%rbp,%rax), %edx54 movl -116(%rbp), %eax55 cltq56 movb %dl, -112(%rbp,%rax)57 addl $1, -116(%rbp)58 .L4:59 addl $1, -120(%rbp)60 .L2:61 movl -120(%rbp), %eax62 cltq63 movzbl -112(%rbp,%rax), %eax64 testb %al, %al65 jne .L566 movl -116(%rbp), %eax67 cltq68 movb $0, -112(%rbp,%rax)69 movl $.LC1, %edi70 call puts71 leaq -112(%rbp), %rax72 movq %rax, %rdi73 call puts74 movq -8(%rbp), %rdx75 xorq %fs:40, %rdx76 je .L677 call __stack_chk_fail78 .L6:79 leave80 .cfi_def_cfa 7, 881 ret82 .cfi_endproc83 .LFE0:84 .size main, .-main85 .ident "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3"86 .section .note.GNU-stack,"",@progbits
2023-07-09 11:25:431

Java 堆和栈到底要怎么理解

这要从操作系统里进程的内存结构说起了。。。下图是linux 中一个进程的虚拟内存分布:gt;图中0号地址在最下边,越往上内存地址越大。以32位地址操作系统为例,一个进程可拥有的虚拟内存地址范围为0-2^32。分为两部分,一部分留给kernel使用(kernel virtual memory),剩下的是进程本身使用, 即图中的process virtual memory。普通Java 程序使用的就是process virtual memory.上图中最顶端的一部分内存叫做user stack. 这就是题目问的 stack. 中间有个 runtime heap。就是题目中的heap. 他们的名字和数据结构里的stack 和 heap 几乎每啥关系。注意在上图中,stack 是向下生长的; heap是向上生长的。当程序进行函数调用时,每个函数都在stack上有一个 call frame。比如对于以下程序,public void foo(){//do something...println("haha"); // <<<=== 在这儿设置breakpoint 1}public void bar(){foo();}main(){bar();println("hahaha"); // <<<=== 在这儿设置 breakpoint 2}当程序运行到breakponit1时,user stack 里会有三个frame|| main 函数的 frame-------------------|| bar 函数的 frame-------------------<<<=== %ebp|| foo 函数的 frame------------------- <<<===%esp其中 esp 和 ebp 都是寄存器。 esp 指向stack 的顶(因为stack 向下生长,esp会向下走); ebp 指向当前frame的边界。当程序继续执行到brekapoing 2的时候stack 大概是这样的:
2023-07-09 11:25:501

汇编语言中的堆栈段指针是干什么的

用于指向堆栈的栈顶,以方便管理堆栈.
2023-07-09 11:26:178

JAVA或者C#中如何获取并输出调用堆栈上的变量值

用e.printStackTrace();如果你是说你程序中的用到的堆栈,可以在finally{}块中把堆栈的内容输出来。StackTrace ss = new StackTrace(true);String flName = ss.GetFrame(1).GetFileName();// GetMethod().DeclaringType;int lineNo = ss.GetFrame(1).GetFileLineNumber();String methodName = ss.GetFrame(1).GetMethod().Name;这是 C# 的调用栈上的内容java 中也有一个,StackTraceElement calledSte = getCallStackTraceElement();int lineNo = calledSte.getLineNumber();String className = calledSte.getClassName();String methodName = calledSte.getMethodName();
2023-07-09 11:26:441

ollydbg中bp send下断后, 堆栈窗口无调用call的信息, 这是因为缺少插件吗?

这种问题,挂到 广海 看雪 吾爱破解 比较靠谱。这个跟插件没关系吧。你的问题描述不清楚,什么叫堆栈窗口无法调用call的信息。如果bp send断了,只有3层,一般来说,是使用了线程发包,所以调用层数很少,大致都是功能函数使用消息的方式通知发包线程来做的,发包是异步线程做的,所以不好跟踪。一般来说,这样的程序,bp send不会有多大效果。还有一种可能是,程序中使用了不同的发包函数。你可以尝试断WSASend看看,或者把所有的发包函数都断一下。如果线程发包,尝试跟踪封包数据的写入,因为在上层应该还有一个专门的发包函数,负责写入封包数据,通知发包线程完成发包过程,这样来说比较符合封装逻辑。至于怎么跟踪到这个调用发包线程的发包函数,个人没太多注意,没对付过线程发包。还有种方式就是,可以尝试从关键数据入手,先找到关键的call,然后通过nop方式对call进行向下跟踪,看看能不能找到线程发包函数。以上。
2023-07-09 11:26:511

ORACLE ORA-8103错误要如何解决

ORA-8103是我们Database Consultant 经常要遇到的一个问题,了解ORA-8103的成因非常重要。【数据恢复】利用构造ROWID实现无备份情况下绕过ORA-1578、ORA-8103、ORA-1410等逻辑/物理坏块问题简单来说ORA-8103 的主要成因有2类:数据块的 block type 类型 是 无效的 或者读出来的块类型与Oracle期望的不一致。 例如 Oracle 认为该数据块的类型为data(type=6),但实际却不是。数据块中的data_object_id 和 数据字典中的data_object_id不匹配针对ORA-8103问题 我们优先推荐一些措施:ORA-08103问题的诊断最好是能生成8103错误的ERROR STACK TRACE, 在TRACE中会记录具体引发8103的对象的OBJ和OBJD,这便于我们定位可能存在corruption的对象。问题在于往往前台进程遇到ORA-08103错误不会在后台生成TRACE文件,这需要我们手动设置8103 触发ERRORSTACK的EVENTS:ALTER SYSTEM SET EVENTS "8103 TRACE NAME ERRORSTACK LEVEL 3′;解决思路包括:1. 通过OBJD和DBA定位到具体的表名和块号2. 有条件的情况下对该表做一个analyze .. validate structure3. 有条件的情况下对该表所在tablespace做一个 dbms_space_admin.ASSM_TABLESPACE_VERIFY4. 有条件的情况下move这张表或者相关的分区,尝试绕过该问题5. 有条件的情况下降该表或分区移动到MSSM表空间上,绕过该问题execute dbms_space_admin.tablespace_verify(‘&tablespace_name")oradebug setmypidoradebug tracefile_nameexecute dbms_space_admin.assm_tablespace_verify(‘&tablespace_name",dbms_space_admin.TS_VERIFY_BITMAPS)oradebug setmypidoradebug tracefile_name针对不同的 analyze validate structure 后得到的结果 , 我们可以得到一些初步的结论:如果执行 flush buffer cache之后再次analyze validate structure不再报ORA-8103错误则说明:可能是完全正常的现象,之前的ORA-8103正是也因为对象正在被DROP/TRUNCATE而导致SELECT报ORA-8103。一般来说Call Stack会显示进程正尝试访问该段的segment header。 更多信息可以参考BUG 7441661也可能该问题仅仅发生在buffer cache层,而没有发生在DISK上。通过flush buffer_cache若能解决,则一般是这种情况,往往是Buffer Cache管理的BUG 。如果执行 flush buffer cache之后再次analyze validate structure再次报ORA-8103错误则说明:如果dump对应的数据块发现 该块在逻辑上是完整一致的(也可以用bbed/dbv工具验证), 则有可能是Lost Write,则不是被其他对象重格式化使用了。这里判断Lost Write的一个重要手段是 对块做recover/blockrecover,如果recover能修复该块,则说明是因为Lost Write引起了本ORA-8103问题,如果不是则说明99%的可能性是BUG引起的。常见的一种现象是 使用第三方工具在数据库打开的情况下copy 数据库,这些工具的BUG可能导致copy 老的版本的block到目标新库中。另一种可能是 extent盘区级别的不一致。 同一个数据块/extent 可能 同时属于 2个数据段segment,这导致其中的一个被后者覆盖。 通过recover的方式是无法修复这种场景的, 因为这种逻辑的讹误发生在表空间级别的extent信息上。 可以检查dba_extents/dba_segments/dba_free_space这些视图来确定问题数据块到底是否同时属于多个对象, 或者 一个数据块 同时出现在dba_extents/dba_segments/dba_free_space 三个视图中, 因为 used extent 不该出现在dba_free_space中,而free extent不该在dba_extents,当然要排除recyclebin中对象的影响。 绝大多数情况下这种extent逻辑不一致的现象, 被称作extent overlap , 通常是Oracle Space Management空间管理层面的BUG。在对ORA-8103问题的诊断过程中 定位问题的OBJD异常重要。应当说准确地将ORA-8103错误与BUG定位起来是有难度的,因为这往往需要涉及到redo dump以发现到底是哪些opcode造成了后续的objd 或 block type 不一致。在一些BUG中我们发现,由于可能的变量陈旧,造成objd的结构未合理清除, 之后就发现block上的objd是错的了,可能遇到ORA-8103也可能是ORA-1410, 这引起了后续其他的逻辑讹误,以至于很难通过TRACE/REDO LOG DUMP来定位原始问题所在。 这也是为什么虽然在例如版本10.2.0.4上有几个ORA-8103的bug Note, 但这些BUG最终未被close为real software bug即真的软件BUG , 大多都是不了了之,因为在用户现场的TRACE和REDO DUMP都未必能真实定位到问题所在,这也是为什么我们要说逻辑讹误的分析和处理原要比物理讹误来的复杂。Maclean的经验是 在有大量Oracle DB的环境下 一年出个几次的逻辑/物理坏块是很正常的事情, 对于物理讹误 我们只要切实备份即可99%得解决。 而对于逻辑坏块可做的 事情不多, 打最新的补丁 开 db_block_checking、db_block_checksum几件事情而已。值得一说的是 如果去读一下ORA-8103的一些Bug Note,可以发现使用 LOB、APPEND INSERT、PARALLEL INSERT、exchange partition 、Split partition、advanced compression、HCC 混合列压缩往往是引起ORA-8103的高危操作 , 但实际我们又不可能放弃上述操作。如果自己搞不定可以找ASKMACLEAN专业数据库修复团队成员帮您恢复!
2023-07-09 11:27:001

主程序执行完ACALL后返回主程序后,堆栈指针SP的值

加2,别误人子弟
2023-07-09 11:27:082

系统出现0x00007ff错误怎么办?

故障原因:0x00007ff指令中引用的0x000007ff内存,该内存不能为READ是因为计算机的应用程序出错。该问题为内存错误,无法解决。Windows操作系统有时会出现错误信息,例如写内存错误系统会提示:「“该内存不能为“read”或“written”」,然后应用程序自行关闭,程序不能运行。Windows操作系统出现这个问题的最终原因是因为硬件或者软件产生了冲突。解决方法:1.按“windows+X”键调出菜单点击“运行”。2.弹出窗口,输入“cmd”然后点击“确定”。3.复制以下代码:for%1in(%windir%system32*.dll)doregsvr32.exe/s%1在弹出窗口中点击右键选择“粘贴”。4.然后按回车键,耐心等待几分钟即可。
2023-07-09 11:27:171

linux重启显示call trace 为什么 怎么办 很着急啊

用户程序可以在以下情形call trace,以方便调试:l 程序崩溃时,都会收到一个信号。Linux系统接收到某些信号时会自动打印call trace。l 在用户程序中添加检查点,类似于assert机制,如果检查点的条件不满足,就执行call trace。http://blog.csdn.net/walkingman321/article/details/6114224
2023-07-09 11:27:581