Hi ki.stfu, clayborg,

For some time, eclipse (CDT) uses full path of the file in break-insert command 
when putting breakpoint on a source line. On windows, a typical command looks 
like the following.
56-break-insert -f F:\\work\\ws\\test\\main.c:49

Current implementation in lldb-mi have problem in 2 ways. It was assuming that 
there will be only one : in the path which is wrong if full path is supplied. 
Also CDT sends out path with double backslashes in windows which gives error on 
resolution. I am replacing \\ with / to handle this issue.

Tested on both Windows and Linux using CDT and seems to work.

http://reviews.llvm.org/D7379

Files:
  MICmdCmdBreak.cpp

Index: MICmdCmdBreak.cpp
===================================================================
--- MICmdCmdBreak.cpp
+++ MICmdCmdBreak.cpp
@@ -180,19 +180,24 @@
     CMIUtilString fileName;
     MIuint nFileLine = 0;
     CMIUtilString strFileFn;
-    const MIint nPosColon = m_brkName.find(cColon);
-    if (nPosColon != (MIint)std::string::npos)
+    CMIUtilString rStrLineOrFn;
+    // Full path in windows can have : after drive letter. So look for the
+    // last colon
+    const size_t nPosColon = m_brkName.find_last_of(cColon);
+    if (nPosColon != std::string::npos)
     {
-        CMIUtilString::VecString_t vecFileAndLocation;
-        const MIuint nSplits = m_brkName.Split(cColon, vecFileAndLocation);
-        MIunused(nSplits);
-        if (vecFileAndLocation.size() != 2)
+        // extract file name and line number from it
+        fileName = m_brkName.substr(0, nPosColon);
+        rStrLineOrFn = m_brkName.substr(nPosColon + 1, m_brkName.size() - 
nPosColon - 1);
+
+        // Replace \\ with /
+        size_t pos = 0;
+        while ((pos = fileName.find("\\\\", pos)) != std::string::npos)
         {
-            
SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_BRKPT_LOCATION_FORMAT), 
m_cmdData.strMiCmd.c_str(), m_brkName.c_str()));
-            return MIstatus::failure;
+            fileName.replace(pos, 2, "/");
+            pos += 1;
         }
-        fileName = vecFileAndLocation.at(0);
-        const CMIUtilString &rStrLineOrFn(vecFileAndLocation.at(1));
+
         if (rStrLineOrFn.empty())
             eBrkPtType = eBreakPoint_ByName;
         else

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
Index: MICmdCmdBreak.cpp
===================================================================
--- MICmdCmdBreak.cpp
+++ MICmdCmdBreak.cpp
@@ -180,19 +180,24 @@
     CMIUtilString fileName;
     MIuint nFileLine = 0;
     CMIUtilString strFileFn;
-    const MIint nPosColon = m_brkName.find(cColon);
-    if (nPosColon != (MIint)std::string::npos)
+    CMIUtilString rStrLineOrFn;
+    // Full path in windows can have : after drive letter. So look for the
+    // last colon
+    const size_t nPosColon = m_brkName.find_last_of(cColon);
+    if (nPosColon != std::string::npos)
     {
-        CMIUtilString::VecString_t vecFileAndLocation;
-        const MIuint nSplits = m_brkName.Split(cColon, vecFileAndLocation);
-        MIunused(nSplits);
-        if (vecFileAndLocation.size() != 2)
+        // extract file name and line number from it
+        fileName = m_brkName.substr(0, nPosColon);
+        rStrLineOrFn = m_brkName.substr(nPosColon + 1, m_brkName.size() - nPosColon - 1);
+
+        // Replace \\ with /
+        size_t pos = 0;
+        while ((pos = fileName.find("\\\\", pos)) != std::string::npos)
         {
-            SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_BRKPT_LOCATION_FORMAT), m_cmdData.strMiCmd.c_str(), m_brkName.c_str()));
-            return MIstatus::failure;
+            fileName.replace(pos, 2, "/");
+            pos += 1;
         }
-        fileName = vecFileAndLocation.at(0);
-        const CMIUtilString &rStrLineOrFn(vecFileAndLocation.at(1));
+
         if (rStrLineOrFn.empty())
             eBrkPtType = eBreakPoint_ByName;
         else
_______________________________________________
lldb-commits mailing list
lldb-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

Reply via email to