## Ò»¡¢´íÎó¸ùÔ´Éî¶È½âÎö
### 1. ´íÎóÈÕÖ¾¹Ø¼üÐÅÏ¢½âÂë
¸ù¾ÝÌṩµÄ´íÎóÐÅÏ¢£¬ºËÐÄÎÊÌ⼯ÖÐÔÚ£º
```
TPlayObject::Run -> Operate 2 # Ident:1006
Sender:332050640 wP:0 nP1:202951097 nP2:0 np3:0
Msg:lXOHwHVwj[h
Invalid pointer operation
```
**¼¼Êõ½âÂë**£º
- `Operate 2`£ºÓÎÏ·¶ÔÏó²Ù×÷Ö¸Á¶ÔÓ¦ÎïÆ·Ê¹ÓÃ/¼¼ÄÜÊÍ·Å£©
- `Ident:1006`£º²Ù×÷ÂëÓ³Éäµ½`QFunction-0.txt`ÖеÄ`[@StdModeFuncX]`¶Î
- `lXOHwHVwj[h`£ºÃÜÎÄÖ¸ÁÐè½âÃÜΪ¾ßÌå½Å±¾º¯Êý£©
---
## ¶þ¡¢Îå´óºËÐÄÎÊÌâÅŲ鷽Ïò
### 1. ½Å±¾ÄÚ´æ¹ÜÀí²îÒì
ôá·çÓëÇå·çÒýÇæ¶Ô½Å±¾±äÁ¿µÄÄÚ´æ´¦Àí»úÖÆ´æÔÚ±¾ÖÊÇø±ð£º
| ÒýÇæÌØÐÔ | ôá·çM2 | Çå·çM2 |
|-------------------|-----------------------|-----------------------|
| ×Ö·û´®´¦Àí | ×Ô¶¯À¬»ø»ØÊÕ | ÊÖ¶¯ÄÚ´æÊÍ·Å |
| Ö¸Õë´«µÝ | ÔÊÐí¿ç½Å±¾´«µÝ | Ñϸñ×÷ÓÃÓòÏÞÖÆ |
| Êý×éÔ½½ç | ×Ô¶¯À©ÈÝ | ´¥·¢Òì³£ |
**µäÐÍ´íÎó½Å±¾**£º
```lua
[@StdModeFunc1006]
#IF
#ACT
MOV S0 "²âÊÔ" ; ôá·ç×Ô¶¯¹ÜÀíÄÚ´æ
MOV S1 S0 ; Çå·ç¿ÉÄÜÒý·¢Ò°Ö¸Õë
```
**ÐÞ¸´·½°¸**£º
```lua
[@StdModeFunc1006]
#IF
#ACT
FormatStr S0 "²âÊÔ" ; ʹÓøñʽ»¯º¯Êý
CopyStr S1 S0 ; ÏÔʽ¿½±´×Ö·û´®
```
---
### 2. Êý¾Ý¿â×ֶμæÈÝÐÔÎÊÌâ
¶Ô±È¼ì²é`StdItems.DB`µÄIdent=1006ÎïÆ·×ֶΣº
| ×Ö¶ÎÃû | ôá·çÖµ | Çå·çÒªÇó |
|--------------|---------------------|-----------------------|
| StdMode | 1006 | 1006 |
| NeedIdentify | 0 | ±ØÐë≥1£¨´¥·¢¼ø¶¨£© |
| AniCount | ×Ö·û´®ÀàÐÍ | ±ØÐëΪÕûÊý |
**ÐÞ¸´·½°¸**£º
```sql
UPDATE StdItems SET
NeedIdentify=1,
AniCount=CAST(AniCount AS INTEGER)
WHERE StdMode=1006;
```
---
### 3. ²å¼þDLL¼æÈÝÐÔ³åÍ»
Çå·çM2¶ÔµÚÈý·½²å¼þµÄÄÚ´æ¹ÜÀí¸üÑϸñ£º
| ²å¼þÀàÐÍ | ·çÏÕµã | ¼ì²â·½·¨ |
|-------------|-----------------------|-----------------------|
| ·´Íâ¹Ò²å¼þ | HookÁËSend/Recvº¯Êý | ʹÓÃProcess Monitor¼à¿ØDLL¼ÓÔØ |
| ÌØÐ§²å¼þ | δÊÍ·ÅDirectX×ÊÔ´ | ¼ì²édx_handleй© |
**ÅŲ鲽Öè**£º
1. Çå¿Õ`Plugins`Ŀ¼²âÊÔ
2. Öð¸ö¼ÓÔØ²å¼þ¹Û²ì±¨´íƵÂÊ
---
### 4. ÓÎÏ·ÐÒé°æ±¾²»Æ¥Åä
Çå·çM2¶Ô·â°üУÑé¸üÑϸñ£º
| ÐÒéÌØÕ÷ | ôá·çM2 | Çå·çM2 |
|-------------|-----------------------|-----------------------|
| ¼ÓÃÜËã·¨ | XOR+¼òµ¥Ð£ÑéºÍ | CRC32+TEA¼ÓÃÜ |
| ·â°ü³¤¶È | ÔÊÐí±10%Îó²î | ÑϸñУÑé |
**½â¾ö·½°¸**£º
1. ʹÓÃWiresharkץȡ²Ù×÷Âë1006µÄ·â°ü
2. ¶Ô±È¿Í»§¶ËÓë·þÎñ¶ËÐÒé°æ±¾
---
### 5. ¶àÏß³Ì×ÊÔ´¾ºÕù
Çå·çM2²ÉÓøü¼¤½øµÄÏ̵߳÷¶È²ßÂÔ£º
```mermaid
graph LR
A[Ö÷Ïß³Ì] --> B[ÍøÂçÏß³Ì]
A --> C[Âß¼Ïß³Ì]
C --> D[Êý¾Ý¿âÏß³Ì]
B --> C
```
**¾ºÕù³¡¾°**£º
- ͬһ½ÇɫͬʱÔÚ¶à¸öÏ̲߳Ù×÷×°±¸À¸
- ¿ìËÙÇл»µØÍ¼Ê±´¥·¢Òì²½¼ÓÔØ
**ÐÞ¸´·½°¸**£º
```c++
// α´úÂëʾÀý£ºÔö¼Ó»¥³âËø
std::mutex g_itemMutex;
void OperateItem(int playerID) {
std::lock_guard<std::mutex> lock(g_itemMutex);
// ÎïÆ·²Ù×÷Âß¼
}
```
---
## Èý¡¢·Ö²½½â¾ö·½°¸
### ²½Öè1£º½Å±¾°²È«¼Ó¹Ì
1. ÔÚ`QFunction-0.txt`Í·²¿Ìí¼Ó£º
```lua
[@OnMemoryCheck]
#IF
#ACT
SetMemoryCheckLevel 3 ; ¿ªÆôÑϸñÄÚ´æ¼ì²é
```
2. ÐÞ¸ÄËùÓÐ`MOV`Ö¸ÁîΪ°²È«°æ±¾£º
```diff
- MOV S0 "²âÊÔ"
+ FormatStr S0 "²âÊÔ"
```
### ²½Öè2£ºÊý¾Ý¿âÓÅ»¯
```sql
-- ÇåÀíÎÞЧָÕëÒýÓÃ
DELETE FROM StdItems WHERE StdMode NOT IN (SELECT Ident FROM ItemType);
```
### ²½Öè3£ºÒýÇæ²ÎÊýµ÷ÓÅ
ÔÚ`!Setup.txt`ÖÐÔö¼Ó£º
```ini
[Performance]
MaxCacheSize=1024 ; Ôö´óÄڴ滺´æ
EnableThreadLock=1 ; ÆôÓÃÏß³ÌËø
```
---
## ËÄ¡¢³¤Ð§Ô¤·À»úÖÆ
### 1. ×Ô¶¯»¯²âÊÔ¿ò¼Ü
```python
# ѹÁ¦²âÊԽű¾Ê¾Àý
import socket
import threading
def send_packet():
# ¹¹Ôì²Ù×÷Âë1006µÄ·â°ü
pass
for i in range(100):
t = threading.Thread(target=send_packet)
t.start()
```
### 2. ÄÚ´æ¼à¿Ø·½°¸
ʹÓÃWindbgÉèÖöϵ㣺
```
bp M2Server!TPlayObject::Run ".echo 'ÄÚ´æÒì³£'; gc"
```
---
## Îå¡¢ÆóÒµ¼¶ÔÖ±¸½¨Òé
### 1. Ë«ÒýÇæ»ìºÏ¼Ü¹¹
```mermaid
graph TB
A[¿Í»§¶Ë] --> B{¸ºÔؾùºâ}
B --> C[ôá·çM2¼¯Èº]
B --> D[Çå·çM2¼¯Èº]
C --> E[¹²ÏíÊý¾Ý¿â]
D --> E
```
### 2. »Ò¶È·¢²¼²ßÂÔ
| ½×¶Î | Ä¿±êÓû§ | ÒýÇæ°æ±¾ |
|--------|---------------------|-------------------|
| µÚÒ»½×¶Î | ÄÚ²âÍæ¼Ò(5%) | Çå·çM2+ÑϸñÈÕÖ¾ |
| µÚ¶þ½×¶Î | ºËÐÄÍæ¼Ò(20%) | Ë«ÒýÇæ²¢ÐÐ |
| µÚÈý½×¶Î | È«Á¿Óû§ | ¸ù¾ÝÎȶ¨ÐÔÑ¡Ôñ |
---
## ½áÓ¹¹½¨Îȶ¨´«ÆæÉú̬µÄÖÕ¼«·¨Ôò
½â¾öÇå·çM2µÄÖ¸ÕëÒì³£ÎÊÌâÐèÒª´Ó**ÄÚ´æ¹ÜÀí→Ï̵߳÷¶È→ÐÒéУÑé**¶àά¶È½éÈë¡£½¨Òé²ÉÓÃÒÔÏ»ƽð·¨Ôò£º
1. **½Å±¾¹æ·¶**£ºËùÓÐ×Ö·û´®²Ù×÷±ØÐëʹÓÃ`FormatStr/CopyStr`
2. **Êý¾Ý¿âÔ¼Êø**£ºÎª¹Ø¼ü±íÔö¼Ó`CHECK`Ô¼Êø
3. **ѹÁ¦²âÊÔ**£ºÃ¿ÈÕÖ´ÐÐ10Íò´Î²Ù×÷Âë1006µÄרÏî²âÊÔ
4. **¼à¿ØÔ¤¾¯**£ºÉèÖÃÄÚ´æÊ¹ÓÃÂÊ£¾80%×Ô¶¯¸æ¾¯
ͨ¹ý³ÖÐø¼¯³É£¨ÈçJenkins£©¹¹½¨"´úÂëÌá½»→×Ô¶¯»¯²âÊÔ→»Ò¶È·¢²¼"µÄÍêÕû±Õ»·£¬¿É´Ó¸ù±¾ÉÏÏû³ýż·¢±¨´íÎÊÌ⣬´òÔìÁã¹ÊÕϵĴ«ÆæÓÎÏ·»·¾³¡£
#### ´íÎóÏÖÏóÃèÊö
¸ù¾ÝÌṩµÄÈÕÖ¾ÐÅÏ¢£¬ÎÒÃÇ¿ÉÒÔ¿´µ½Èçϱ¨´í£º
```
2007-4-22 20:38:10 [Exception] TPlayObject::Run -> Operate 2 # Ìáʾ£ºÎ£ÏÕÈË Ident:1006 Sender:332050640 wP:0 nP1:202951097 nP2:0 np3:0 Msg:lXOHwHVwj[h
2007-4-22 20:38:10 Invalid pointer operation
...
```
ÕâЩ´íÎóÐÅÏ¢±íÃ÷£¬ÔÚÖ´ÐÐijЩÓÎÏ·²Ù×÷ʱ£¬³ÌÐòÓöµ½ÁËÎÞЧָÕë²Ù×÷£¨Invalid pointer operation£©£¬Õâͨ³£Òâζ×ų¢ÊÔ·ÃÎÊÒ»¸öδ³õʼ»¯»òÒѾ±»ÊͷŵÄÄÚ´æµØÖ·¡£
#### ¿ÉÄÜÔÒò·ÖÎö
1. **½Å±¾²»¼æÈÝÐÔ**
- ôá·çM2ºÍÇå·çM2ʹÓõĽű¾ÓïÑÔ¿ÉÄÜ´æÔÚ²îÒ죬µ¼ÖÂÔ±¾ÔÚôá·çM2ÏÂÕý³£¹¤×÷µÄ½Å±¾ÔÚÇå·çM2»·¾³ÏÂÎÞ·¨ÕýÈ·½âÊÍ»òÖ´ÐС£
2. **ÄÚ´æ¹ÜÀí²îÒì**
- ²»Í¬°æ±¾µÄM2ÒýÇæ¿ÉÄܲÉÓò»Í¬µÄÄÚ´æ¹ÜÀíºÍÀ¬»ø»ØÊÕ»úÖÆ£¬µ¼ÖÂijЩÇé¿öÏ£¬¶ÔÏóÉúÃüÖÜÆÚ¹ÜÀí³öÏÖÎÊÌ⣬´Ó¶øÒý·¢ÎÞЧָÕë²Ù×÷´íÎó¡£
3. **ÅäÖÃÎļþ³åÍ»**
- Èç¹ûÅäÖÃÎļþûÓÐÕë¶ÔÐÂÒýÇæ½øÐÐÊʵ±µ÷Õû£¬ÀýÈç·¾¶ÉèÖá¢Êý¾Ý¿âÁ¬½Ó²ÎÊýµÈ£¬Ò²¿ÉÄÜÒýÆðÀàËÆµÄÔËÐÐʱ´íÎó¡£
4. **²å¼þ»òÀ©Õ¹ÎÊÌâ**
- ijЩµÚÈý·½²å¼þ»òÀ©Õ¹¿ÉÄÜרÃÅΪij¸öÌØ¶¨°æ±¾µÄM2ÒýÇæÉè¼Æ£¬Ç¨ÒƵ½ÁíÒ»¸ö°æ±¾ºó£¬ÓÉÓڽӿڱ仯»ò¹¦ÄÜȱʧ¶øµ¼Ö´íÎó¡£
#### ½â¾ö·½°¸½¨Òé
ΪÁËÅŲ鲢½â¾öÕâ¸öÎÊÌ⣬¿ÉÒÔ²ÉÈ¡ÒÔϲ½Ö裺
1. **¼ì²é½Å±¾¼æÈÝÐÔ**
- ¶Ô±ÈÁ½¸ö°æ±¾Ö®¼äµÄ½Å±¾²îÒì£¬ÌØ±ðÊÇÄÇÐ©Éæ¼°Íæ¼Ò½»»¥¡¢ÎïÆ·½»Ò׵ȹ¦ÄܵĺËÐĽű¾£¬È·±£ËüÃÇ·ûºÏÇå·çM2µÄÒªÇó¡£
2. **ÓÅ»¯ÄÚ´æ¹ÜÀí**
- µ÷ÕûÓÎÏ·Âß¼ÒÔ±ÜÃâDZÔÚµÄÄÚ´æÐ¹Â©µã£¬±ÈÈçÈ·±£ËùÓж¯Ì¬·ÖÅäµÄ¶ÔÏó¶¼±»Í×ÉÆÊÍ·Å£¬ÌرðÊÇÔڸ߲¢·¢³¡¾°Ï¡£
3. **¸üÐÂÅäÖÃÎļþ**
- ¸ù¾ÝÇå·çM2µÄ¾ßÌåÐèÇóÖØÐÂÉó²é²¢ÐÞ¸ÄÏà¹ØÅäÖÃÎļþ£¬È·±£Â·¾¶¡¢È¨ÏÞºÍÆäËû¹Ø¼ü²ÎÊýÉèÖÃ׼ȷÎÞÎó¡£
4. **²âÊÔÓëµ÷ÊÔ**
- ÀûÓÿª·¢¹¤¾ß¶ÔÒÉËÆÎÊÌâÇøÓò½øÐÐÏêϸ²âÊÔ£¬Öð²½ËõСÎÊÌⷶΧֱÖÁÕÒµ½È·ÇÐÔÒò¡£
- ¿ªÆôÏêϸµÄÈÕÖ¾¼Ç¼¹¦ÄÜ£¬ÒÔ±ã¸üºÃµØ×·×Ù´íÎó·¢ÉúµÄÉÏÏÂÎÄ»·¾³¡£
#### ½áÂÛ
ͨ¹ýÉÏÊö·ÖÎö¿ÉÒÔ¿´³ö£¬ËäÈ»ôá·çM2ºÍÇå·çM2¶¼ÊÇ·þÎñÓÚ¡¶ÈÈѪ´«Ææ¡·µÄÇ¿´óÒýÇæ£¬µ«ÓÉÓÚ¸÷×ÔʵÏÖϸ½ÚÉϵIJ»Í¬£¬Ö±½ÓÌæ»»¿ÉÄܵ¼Ö¼æÈÝÐÔÎÊÌ⡣ΪÁ˽â¾öµ±Ç°Óöµ½µÄ´íÎó£¬ÐèÒª×Ðϸ¶Ô±ÈÁ½ÕߵIJîÒ죬ÓÈÆäÊǹØ×¢½Å±¾±àд¹æ·¶¡¢ÄÚ´æ¹ÜÀíģʽÒÔ¼°ÅäÖÃÎļþÉ趨µÈ·½Ã档ϣÍû±¾ÎÄÌṩµÄÖ¸µ¼Äܹ»°ïÖúÄã˳Àû½â¾öÎÊÌ⣬»Ö¸´·þÎñÆ÷µÄÎȶ¨ÔËÐС£
### 1. ´íÎóÈÕÖ¾¹Ø¼üÐÅÏ¢½âÂë
¸ù¾ÝÌṩµÄ´íÎóÐÅÏ¢£¬ºËÐÄÎÊÌ⼯ÖÐÔÚ£º
```
TPlayObject::Run -> Operate 2 # Ident:1006
Sender:332050640 wP:0 nP1:202951097 nP2:0 np3:0
Msg:lXOHwHVwj[h
Invalid pointer operation
```
**¼¼Êõ½âÂë**£º
- `Operate 2`£ºÓÎÏ·¶ÔÏó²Ù×÷Ö¸Á¶ÔÓ¦ÎïÆ·Ê¹ÓÃ/¼¼ÄÜÊÍ·Å£©
- `Ident:1006`£º²Ù×÷ÂëÓ³Éäµ½`QFunction-0.txt`ÖеÄ`[@StdModeFuncX]`¶Î
- `lXOHwHVwj[h`£ºÃÜÎÄÖ¸ÁÐè½âÃÜΪ¾ßÌå½Å±¾º¯Êý£©
---
## ¶þ¡¢Îå´óºËÐÄÎÊÌâÅŲ鷽Ïò
### 1. ½Å±¾ÄÚ´æ¹ÜÀí²îÒì
ôá·çÓëÇå·çÒýÇæ¶Ô½Å±¾±äÁ¿µÄÄÚ´æ´¦Àí»úÖÆ´æÔÚ±¾ÖÊÇø±ð£º
| ÒýÇæÌØÐÔ | ôá·çM2 | Çå·çM2 |
|-------------------|-----------------------|-----------------------|
| ×Ö·û´®´¦Àí | ×Ô¶¯À¬»ø»ØÊÕ | ÊÖ¶¯ÄÚ´æÊÍ·Å |
| Ö¸Õë´«µÝ | ÔÊÐí¿ç½Å±¾´«µÝ | Ñϸñ×÷ÓÃÓòÏÞÖÆ |
| Êý×éÔ½½ç | ×Ô¶¯À©ÈÝ | ´¥·¢Òì³£ |
**µäÐÍ´íÎó½Å±¾**£º
```lua
[@StdModeFunc1006]
#IF
#ACT
MOV S0 "²âÊÔ" ; ôá·ç×Ô¶¯¹ÜÀíÄÚ´æ
MOV S1 S0 ; Çå·ç¿ÉÄÜÒý·¢Ò°Ö¸Õë
```
**ÐÞ¸´·½°¸**£º
```lua
[@StdModeFunc1006]
#IF
#ACT
FormatStr S0 "²âÊÔ" ; ʹÓøñʽ»¯º¯Êý
CopyStr S1 S0 ; ÏÔʽ¿½±´×Ö·û´®
```
---
### 2. Êý¾Ý¿â×ֶμæÈÝÐÔÎÊÌâ
¶Ô±È¼ì²é`StdItems.DB`µÄIdent=1006ÎïÆ·×ֶΣº
| ×Ö¶ÎÃû | ôá·çÖµ | Çå·çÒªÇó |
|--------------|---------------------|-----------------------|
| StdMode | 1006 | 1006 |
| NeedIdentify | 0 | ±ØÐë≥1£¨´¥·¢¼ø¶¨£© |
| AniCount | ×Ö·û´®ÀàÐÍ | ±ØÐëΪÕûÊý |
**ÐÞ¸´·½°¸**£º
```sql
UPDATE StdItems SET
NeedIdentify=1,
AniCount=CAST(AniCount AS INTEGER)
WHERE StdMode=1006;
```
---
### 3. ²å¼þDLL¼æÈÝÐÔ³åÍ»
Çå·çM2¶ÔµÚÈý·½²å¼þµÄÄÚ´æ¹ÜÀí¸üÑϸñ£º
| ²å¼þÀàÐÍ | ·çÏÕµã | ¼ì²â·½·¨ |
|-------------|-----------------------|-----------------------|
| ·´Íâ¹Ò²å¼þ | HookÁËSend/Recvº¯Êý | ʹÓÃProcess Monitor¼à¿ØDLL¼ÓÔØ |
| ÌØÐ§²å¼þ | δÊÍ·ÅDirectX×ÊÔ´ | ¼ì²édx_handleй© |
**ÅŲ鲽Öè**£º
1. Çå¿Õ`Plugins`Ŀ¼²âÊÔ
2. Öð¸ö¼ÓÔØ²å¼þ¹Û²ì±¨´íƵÂÊ
---
### 4. ÓÎÏ·ÐÒé°æ±¾²»Æ¥Åä
Çå·çM2¶Ô·â°üУÑé¸üÑϸñ£º
| ÐÒéÌØÕ÷ | ôá·çM2 | Çå·çM2 |
|-------------|-----------------------|-----------------------|
| ¼ÓÃÜËã·¨ | XOR+¼òµ¥Ð£ÑéºÍ | CRC32+TEA¼ÓÃÜ |
| ·â°ü³¤¶È | ÔÊÐí±10%Îó²î | ÑϸñУÑé |
**½â¾ö·½°¸**£º
1. ʹÓÃWiresharkץȡ²Ù×÷Âë1006µÄ·â°ü
2. ¶Ô±È¿Í»§¶ËÓë·þÎñ¶ËÐÒé°æ±¾
---
### 5. ¶àÏß³Ì×ÊÔ´¾ºÕù
Çå·çM2²ÉÓøü¼¤½øµÄÏ̵߳÷¶È²ßÂÔ£º
```mermaid
graph LR
A[Ö÷Ïß³Ì] --> B[ÍøÂçÏß³Ì]
A --> C[Âß¼Ïß³Ì]
C --> D[Êý¾Ý¿âÏß³Ì]
B --> C
```
**¾ºÕù³¡¾°**£º
- ͬһ½ÇɫͬʱÔÚ¶à¸öÏ̲߳Ù×÷×°±¸À¸
- ¿ìËÙÇл»µØÍ¼Ê±´¥·¢Òì²½¼ÓÔØ
**ÐÞ¸´·½°¸**£º
```c++
// α´úÂëʾÀý£ºÔö¼Ó»¥³âËø
std::mutex g_itemMutex;
void OperateItem(int playerID) {
std::lock_guard<std::mutex> lock(g_itemMutex);
// ÎïÆ·²Ù×÷Âß¼
}
```
---
## Èý¡¢·Ö²½½â¾ö·½°¸
### ²½Öè1£º½Å±¾°²È«¼Ó¹Ì
1. ÔÚ`QFunction-0.txt`Í·²¿Ìí¼Ó£º
```lua
[@OnMemoryCheck]
#IF
#ACT
SetMemoryCheckLevel 3 ; ¿ªÆôÑϸñÄÚ´æ¼ì²é
```
2. ÐÞ¸ÄËùÓÐ`MOV`Ö¸ÁîΪ°²È«°æ±¾£º
```diff
- MOV S0 "²âÊÔ"
+ FormatStr S0 "²âÊÔ"
```
### ²½Öè2£ºÊý¾Ý¿âÓÅ»¯
```sql
-- ÇåÀíÎÞЧָÕëÒýÓÃ
DELETE FROM StdItems WHERE StdMode NOT IN (SELECT Ident FROM ItemType);
```
### ²½Öè3£ºÒýÇæ²ÎÊýµ÷ÓÅ
ÔÚ`!Setup.txt`ÖÐÔö¼Ó£º
```ini
[Performance]
MaxCacheSize=1024 ; Ôö´óÄڴ滺´æ
EnableThreadLock=1 ; ÆôÓÃÏß³ÌËø
```
---
## ËÄ¡¢³¤Ð§Ô¤·À»úÖÆ
### 1. ×Ô¶¯»¯²âÊÔ¿ò¼Ü
```python
# ѹÁ¦²âÊԽű¾Ê¾Àý
import socket
import threading
def send_packet():
# ¹¹Ôì²Ù×÷Âë1006µÄ·â°ü
pass
for i in range(100):
t = threading.Thread(target=send_packet)
t.start()
```
### 2. ÄÚ´æ¼à¿Ø·½°¸
ʹÓÃWindbgÉèÖöϵ㣺
```
bp M2Server!TPlayObject::Run ".echo 'ÄÚ´æÒì³£'; gc"
```
---
## Îå¡¢ÆóÒµ¼¶ÔÖ±¸½¨Òé
### 1. Ë«ÒýÇæ»ìºÏ¼Ü¹¹
```mermaid
graph TB
A[¿Í»§¶Ë] --> B{¸ºÔؾùºâ}
B --> C[ôá·çM2¼¯Èº]
B --> D[Çå·çM2¼¯Èº]
C --> E[¹²ÏíÊý¾Ý¿â]
D --> E
```
### 2. »Ò¶È·¢²¼²ßÂÔ
| ½×¶Î | Ä¿±êÓû§ | ÒýÇæ°æ±¾ |
|--------|---------------------|-------------------|
| µÚÒ»½×¶Î | ÄÚ²âÍæ¼Ò(5%) | Çå·çM2+ÑϸñÈÕÖ¾ |
| µÚ¶þ½×¶Î | ºËÐÄÍæ¼Ò(20%) | Ë«ÒýÇæ²¢ÐÐ |
| µÚÈý½×¶Î | È«Á¿Óû§ | ¸ù¾ÝÎȶ¨ÐÔÑ¡Ôñ |
---
## ½áÓ¹¹½¨Îȶ¨´«ÆæÉú̬µÄÖÕ¼«·¨Ôò
½â¾öÇå·çM2µÄÖ¸ÕëÒì³£ÎÊÌâÐèÒª´Ó**ÄÚ´æ¹ÜÀí→Ï̵߳÷¶È→ÐÒéУÑé**¶àά¶È½éÈë¡£½¨Òé²ÉÓÃÒÔÏ»ƽð·¨Ôò£º
1. **½Å±¾¹æ·¶**£ºËùÓÐ×Ö·û´®²Ù×÷±ØÐëʹÓÃ`FormatStr/CopyStr`
2. **Êý¾Ý¿âÔ¼Êø**£ºÎª¹Ø¼ü±íÔö¼Ó`CHECK`Ô¼Êø
3. **ѹÁ¦²âÊÔ**£ºÃ¿ÈÕÖ´ÐÐ10Íò´Î²Ù×÷Âë1006µÄרÏî²âÊÔ
4. **¼à¿ØÔ¤¾¯**£ºÉèÖÃÄÚ´æÊ¹ÓÃÂÊ£¾80%×Ô¶¯¸æ¾¯
ͨ¹ý³ÖÐø¼¯³É£¨ÈçJenkins£©¹¹½¨"´úÂëÌá½»→×Ô¶¯»¯²âÊÔ→»Ò¶È·¢²¼"µÄÍêÕû±Õ»·£¬¿É´Ó¸ù±¾ÉÏÏû³ýż·¢±¨´íÎÊÌ⣬´òÔìÁã¹ÊÕϵĴ«ÆæÓÎÏ·»·¾³¡£
#### ´íÎóÏÖÏóÃèÊö
¸ù¾ÝÌṩµÄÈÕÖ¾ÐÅÏ¢£¬ÎÒÃÇ¿ÉÒÔ¿´µ½Èçϱ¨´í£º
```
2007-4-22 20:38:10 [Exception] TPlayObject::Run -> Operate 2 # Ìáʾ£ºÎ£ÏÕÈË Ident:1006 Sender:332050640 wP:0 nP1:202951097 nP2:0 np3:0 Msg:lXOHwHVwj[h
2007-4-22 20:38:10 Invalid pointer operation
...
```
ÕâЩ´íÎóÐÅÏ¢±íÃ÷£¬ÔÚÖ´ÐÐijЩÓÎÏ·²Ù×÷ʱ£¬³ÌÐòÓöµ½ÁËÎÞЧָÕë²Ù×÷£¨Invalid pointer operation£©£¬Õâͨ³£Òâζ×ų¢ÊÔ·ÃÎÊÒ»¸öδ³õʼ»¯»òÒѾ±»ÊͷŵÄÄÚ´æµØÖ·¡£
#### ¿ÉÄÜÔÒò·ÖÎö
1. **½Å±¾²»¼æÈÝÐÔ**
- ôá·çM2ºÍÇå·çM2ʹÓõĽű¾ÓïÑÔ¿ÉÄÜ´æÔÚ²îÒ죬µ¼ÖÂÔ±¾ÔÚôá·çM2ÏÂÕý³£¹¤×÷µÄ½Å±¾ÔÚÇå·çM2»·¾³ÏÂÎÞ·¨ÕýÈ·½âÊÍ»òÖ´ÐС£
2. **ÄÚ´æ¹ÜÀí²îÒì**
- ²»Í¬°æ±¾µÄM2ÒýÇæ¿ÉÄܲÉÓò»Í¬µÄÄÚ´æ¹ÜÀíºÍÀ¬»ø»ØÊÕ»úÖÆ£¬µ¼ÖÂijЩÇé¿öÏ£¬¶ÔÏóÉúÃüÖÜÆÚ¹ÜÀí³öÏÖÎÊÌ⣬´Ó¶øÒý·¢ÎÞЧָÕë²Ù×÷´íÎó¡£
3. **ÅäÖÃÎļþ³åÍ»**
- Èç¹ûÅäÖÃÎļþûÓÐÕë¶ÔÐÂÒýÇæ½øÐÐÊʵ±µ÷Õû£¬ÀýÈç·¾¶ÉèÖá¢Êý¾Ý¿âÁ¬½Ó²ÎÊýµÈ£¬Ò²¿ÉÄÜÒýÆðÀàËÆµÄÔËÐÐʱ´íÎó¡£
4. **²å¼þ»òÀ©Õ¹ÎÊÌâ**
- ijЩµÚÈý·½²å¼þ»òÀ©Õ¹¿ÉÄÜרÃÅΪij¸öÌØ¶¨°æ±¾µÄM2ÒýÇæÉè¼Æ£¬Ç¨ÒƵ½ÁíÒ»¸ö°æ±¾ºó£¬ÓÉÓڽӿڱ仯»ò¹¦ÄÜȱʧ¶øµ¼Ö´íÎó¡£
#### ½â¾ö·½°¸½¨Òé
ΪÁËÅŲ鲢½â¾öÕâ¸öÎÊÌ⣬¿ÉÒÔ²ÉÈ¡ÒÔϲ½Ö裺
1. **¼ì²é½Å±¾¼æÈÝÐÔ**
- ¶Ô±ÈÁ½¸ö°æ±¾Ö®¼äµÄ½Å±¾²îÒì£¬ÌØ±ðÊÇÄÇÐ©Éæ¼°Íæ¼Ò½»»¥¡¢ÎïÆ·½»Ò׵ȹ¦ÄܵĺËÐĽű¾£¬È·±£ËüÃÇ·ûºÏÇå·çM2µÄÒªÇó¡£
2. **ÓÅ»¯ÄÚ´æ¹ÜÀí**
- µ÷ÕûÓÎÏ·Âß¼ÒÔ±ÜÃâDZÔÚµÄÄÚ´æÐ¹Â©µã£¬±ÈÈçÈ·±£ËùÓж¯Ì¬·ÖÅäµÄ¶ÔÏó¶¼±»Í×ÉÆÊÍ·Å£¬ÌرðÊÇÔڸ߲¢·¢³¡¾°Ï¡£
3. **¸üÐÂÅäÖÃÎļþ**
- ¸ù¾ÝÇå·çM2µÄ¾ßÌåÐèÇóÖØÐÂÉó²é²¢ÐÞ¸ÄÏà¹ØÅäÖÃÎļþ£¬È·±£Â·¾¶¡¢È¨ÏÞºÍÆäËû¹Ø¼ü²ÎÊýÉèÖÃ׼ȷÎÞÎó¡£
4. **²âÊÔÓëµ÷ÊÔ**
- ÀûÓÿª·¢¹¤¾ß¶ÔÒÉËÆÎÊÌâÇøÓò½øÐÐÏêϸ²âÊÔ£¬Öð²½ËõСÎÊÌⷶΧֱÖÁÕÒµ½È·ÇÐÔÒò¡£
- ¿ªÆôÏêϸµÄÈÕÖ¾¼Ç¼¹¦ÄÜ£¬ÒÔ±ã¸üºÃµØ×·×Ù´íÎó·¢ÉúµÄÉÏÏÂÎÄ»·¾³¡£
#### ½áÂÛ
ͨ¹ýÉÏÊö·ÖÎö¿ÉÒÔ¿´³ö£¬ËäÈ»ôá·çM2ºÍÇå·çM2¶¼ÊÇ·þÎñÓÚ¡¶ÈÈѪ´«Ææ¡·µÄÇ¿´óÒýÇæ£¬µ«ÓÉÓÚ¸÷×ÔʵÏÖϸ½ÚÉϵIJ»Í¬£¬Ö±½ÓÌæ»»¿ÉÄܵ¼Ö¼æÈÝÐÔÎÊÌ⡣ΪÁ˽â¾öµ±Ç°Óöµ½µÄ´íÎó£¬ÐèÒª×Ðϸ¶Ô±ÈÁ½ÕߵIJîÒ죬ÓÈÆäÊǹØ×¢½Å±¾±àд¹æ·¶¡¢ÄÚ´æ¹ÜÀíģʽÒÔ¼°ÅäÖÃÎļþÉ趨µÈ·½Ã档ϣÍû±¾ÎÄÌṩµÄÖ¸µ¼Äܹ»°ïÖúÄã˳Àû½â¾öÎÊÌ⣬»Ö¸´·þÎñÆ÷µÄÎȶ¨ÔËÐС£

