| 1854 | } |
| 1855 | |
| 1856 | DWORD WINAPI PipeThread(void* param) |
| 1857 | { |
| 1858 | PipeData data; |
| 1859 | |
| 1860 | while(!param) |
| 1861 | { |
| 1862 | int result = RemoteData::SocketReceive(RemoteData::sck, (char*)&data, sizeof(data), 5); |
| 1863 | if(!result || result == -1 || result != sizeof(data) || data.cmd != DEBUG_BREAK_HIT) |
| 1864 | { |
| 1865 | continue; |
| 1866 | } |
| 1867 | ShowWindow(hContinue, SW_SHOW); |
| 1868 | |
| 1869 | for(unsigned int i = 0; i < attachedEdits.size(); i++) |
| 1870 | { |
| 1871 | RichTextarea::ResetLineStyle(attachedEdits[i]); |
| 1872 | RichTextarea::UpdateArea(attachedEdits[i]); |
| 1873 | RichTextarea::ResetUpdate(attachedEdits[i]); |
| 1874 | } |
| 1875 | RefreshBreakpoints(); |
| 1876 | |
| 1877 | data.cmd = DEBUG_BREAK_STACK; |
| 1878 | delete[] RemoteData::stackData; |
| 1879 | RemoteData::stackData = PipeReceiveResponce(data); |
| 1880 | RemoteData::stackSize = data.data.elemCount; |
| 1881 | |
| 1882 | data.cmd = DEBUG_BREAK_CALLSTACK; |
| 1883 | RemoteData::callStack = (unsigned int*)PipeReceiveResponce(data); |
| 1884 | RemoteData::callStackFrames = data.data.elemCount; |
| 1885 | |
| 1886 | if(RemoteData::stackData && RemoteData::callStack) |
| 1887 | FillVariableInfoTree(true); |
| 1888 | TabbedFiles::SetCurrentTab(hDebugTabs, 1); |
| 1889 | |
| 1890 | delete[] RemoteData::callStack; |
| 1891 | RemoteData::callStack = NULL; |
| 1892 | |
| 1893 | breakCommand = NULLC_BREAK_PROCEED; |
| 1894 | WaitForSingleObject(breakResponse, INFINITE); |
| 1895 | |
| 1896 | data.cmd = DEBUG_BREAK_CONTINUE; |
| 1897 | data.question = false; |
| 1898 | data.debug.breakInst = breakCommand; |
| 1899 | if(!PipeSendRequest(data)) |
| 1900 | break; |
| 1901 | } |
| 1902 | |
| 1903 | ExitThread(0); |
| 1904 | } |
| 1905 | |
| 1906 | unsigned int PipeReuqestData(DebugCommand cmd, void **ptr) |
| 1907 | { |
nothing calls this directly
no test coverage detected