Cant Connect to App

Id's Avatar

Id

15 Mar, 2018 03:53 PM

When trying the sample app, I get a timeout error for reveal. I've tried and read the dns-sd related knowledge base article and all of the output was as expected.

Also I see this message in XCode saying that Reveal is started:

Loading Reveal Server from /Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/RevealServer.framework/RevealServer.

  1. 1 Posted by id on 20 Mar, 2018 07:20 PM

    id's Avatar

    bueller? Bueelller?

  2. Support Staff 2 Posted by Tony Arnold on 20 Mar, 2018 10:35 PM

    Tony Arnold's Avatar

    Hi,

    Please accept my apologies for the delay in replying.

    Loading Reveal Server from /Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/RevealServer.framework/RevealServer

    Is there nothing at all printed after that in the console? Normally there'd be some kind of failure/success message.

    thanks,

    Tony

  3. 3 Posted by Id Raja on 23 Mar, 2018 04:58 PM

    Id Raja's Avatar

    I’m loading Reveal through a Symbolic Xcode Breakpoint, and it seems to
    load successfully. What’s the next step to debug this?

    Cheers

    Console Output:

    Loading Reveal Server from
    /Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/RevealServer.framework/RevealServer...
    Reveal Server was loaded successfully

  4. Support Staff 4 Posted by Tony Arnold on 26 Mar, 2018 10:17 PM

    Tony Arnold's Avatar

    It sounds like Reveal Server is loading, but it's not printing the start message. Can you please try updating the breakpoint command to be:

    reveal load --autostart
    

    And see if that helps? Thanks!

  5. 5 Posted by Id Raja on 27 Mar, 2018 02:12 PM

    Id Raja's Avatar

    Hi Tony,

    I tried changing the breakpoint like you suggested, but that did not work.

    I tried some more debugging, with these results that seem to show
    everything is in order. What should I try next?

    Thanks

    ~ ᐅ dns-sd -B _reveal._tcp local

    Browsing for _reveal._tcp.local
    DATE: ---Tue 27 Mar 2018---
     9:06:06.480 ...STARTING...
    Timestamp A/R Flags if Domain Service Type
    Instance Name
     9:06:06.481 Add 2 -1 local. _reveal._tcp.
     Reveal--c465d187
    ^C

    ~ ᐅ export REVEAL=Reveal—c465d187

    ~ ᐅ echo $REVEAL

    Reveal--c465d187

    ~ ᐅ dns-sd -L ${REVEAL} _reveal._tcp.
    Lookup Reveal--c465d187._reveal._tcp..local
    DATE: ---Tue 27 Mar 2018---
     9:07:25.609 ...STARTING...
     9:07:25.610 Reveal--c465d187._reveal._tcp.local. can be reached at
    localhost.:49943 (interface -1)
     isSim=true devSysName=iOS devSysVer=11.2 appExtTypeId= protoVer=42
    appBundleId=com.myApp.myApp appName=myApp appIsExt=false appShortVers=0.9
    devLocalModel=iPad deviceID=iraja-osx-iOS-11.2 devName=iraja-osx
    devModel=iPad appVers=1
    ^C

    ~ ᐅ curl -s -D - http://localhost:49943/application -o /dev/null

    HTTP/1.1 200 OK
    Content-Type: application/json; charset=utf-8
    Reveal-Protocol-Version: 42
    Reveal-Device-Simulator: YES
    Reveal-System-Name: iOS
    Accept-Ranges: bytes
    Date: Tue, 27 Mar 2018 14:08:10 GMT
    Reveal-System-Version: 11.2
    Content-Length: 1271799
    Reveal-Device-Model: iPad

  6. Support Staff 6 Posted by Tony Arnold on 28 Mar, 2018 01:04 AM

    Tony Arnold's Avatar

    Hi Id,

    Sorry about this - let's keep digging:

    In the Bonjour Debugging Article you read earlier, there's a section on checking whether your connection is firewalled by the system firewall, or by a tool like Little Snitch, as well as checking if your /etc/hosts has been modified in any way.

    Could you do that and let me know what you find?

    thanks,

    Tony

  7. 7 Posted by Id Raja on 04 Apr, 2018 02:33 PM

    Id Raja's Avatar

    Hi Tony,

    I’ve checked my `/etc/hosts` file, and it is unaltered.

    I also turned off `iStats Menu`, which could have been interfering. After
    quitting it, the problem persists - I can’t see any apps in Reveal.

    Additionally I have another machine on the same network that works with the
    same test app and the same edition of Reveal.

    What else could it be?

    Thanks,
    Id

  8. Support Staff 8 Posted by Tony Arnold on 08 Apr, 2018 10:58 PM

    Tony Arnold's Avatar

    Hi Id,

    My guess is that it's timing out due to something in your view hierarchy - I really need you to turn on higher levels of logging to see if this is happening. You can do this as shown in our KB article on configuring Reveal Server: http://support.revealapp.com/kb/tips-tricks/revealserver-configurat...

    Unfortunately, I've no experience with Visual Studio for Mac/Xamarin Studio, so I'm really not sure how you pass variables to the iOS app when running it.

    If you can work this out, we'd need something like:

    -IBARevealServerLogLevel DEBUG,INFO,WARN,ERROR
    

    I'll see what I can find out about setting the command line arguments via VS for Mac.

  9. 9 Posted by Id Raja on 09 Apr, 2018 03:36 PM

    Id Raja's Avatar

    Hi Tony,

    I can't get Reveal to work with the sample app "Soundstagram", so that
    eliminates the possibility that my code in a view hierarchy is causing
    Reveal to not work.

    Also, I am not running cross platform code. ie, I'm trying to use Reveal to
    debug native iOS code developed with XCode.

    I have just updated to Reveal 14 and the problem still persists.

    Best,
    Id

  10. Support Staff 10 Posted by Tony Arnold on 16 Apr, 2018 12:24 AM

    Tony Arnold's Avatar

    Could you please try something for me?

    We added this as a debugging override in Reveal 9: IBAHierarchyRequestTimeout

    It allows Reveal to wait longer before timing out:

    1. Quit Reveal if it is running
    2. In your terminal, enter defaults write com.ittybittyapps.Reveal2 IBAHierarchyRequestTimeout 60 (where 60 is the number of seconds you would like Reveal to wait before timing out)
    3. Re-launch Reveal and connect to your app.

    If you ever need to revert the settings, simply execute defaults delete com.ittybittyapps.Reveal2 IBAHierarchyRequestTimeout in your terminal.

    Thanks for being patient.

  11. Support Staff 11 Posted by Oliver Jones on 16 Apr, 2018 12:25 AM

    Oliver Jones's Avatar

    Hi Id,

    Also, can you tell us how long requesting the Reveal data at the command line takes?

    Run time curl -s -D - http://localhost:49943/application -o /dev/null at the command line (updating the port number appropriately).

    Regards

  12. 12 Posted by Id Raja on 17 Apr, 2018 03:52 PM

    Id Raja's Avatar

    ~> time curl -s -D - http://localhost:49943/application -o /dev/null curl -s -D - http://localhost:49943/application -o /dev/null 0.01s user
    0.01s system 19% cpu 0.068 total

    Also of interest, the Reveal Python library has bugs as you can see as I
    try to invoke the lldb commands from the Xcode console:

    (lldb) reveal start
    Traceback (most recent call last):
      File
    "/Applications/Reveal.app/Contents/SharedSupport/Scripts/RevealServerCommands.py",
    line 83, in HandleRevealCommand
        args.func(loader, result, args)
      File
    "/Applications/Reveal.app/Contents/SharedSupport/Scripts/RevealServerCommands.py",
    line 106, in HandleRevealStartCommand
        if loader.isRevealServerLoaded():
      File
    "/Applications/Reveal.app/Contents/SharedSupport/Scripts/RevealServerCommands.py",
    line 158, in isRevealServerLoaded
        pointerValue = int(value, 16)
    TypeError: int() can't convert non-string with explicit base
    (lldb) reveal stop
    Traceback (most recent call last):
      File
    "/Applications/Reveal.app/Contents/SharedSupport/Scripts/RevealServerCommands.py",
    line 83, in HandleRevealCommand
        args.func(loader, result, args)
      File
    "/Applications/Reveal.app/Contents/SharedSupport/Scripts/RevealServerCommands.py",
    line 112, in HandleRevealStopCommand
        if loader.isRevealServerLoaded():
      File
    "/Applications/Reveal.app/Contents/SharedSupport/Scripts/RevealServerCommands.py",
    line 158, in isRevealServerLoaded
        pointerValue = int(value, 16)
    TypeError: int() can't convert non-string with explicit base
    (lldb) reveal status
    Traceback (most recent call last):
      File
    "/Applications/Reveal.app/Contents/SharedSupport/Scripts/RevealServerCommands.py",
    line 83, in HandleRevealCommand
        args.func(loader, result, args)
      File
    "/Applications/Reveal.app/Contents/SharedSupport/Scripts/RevealServerCommands.py",
    line 118, in HandleRevealStatusCommand
        if loader.isRevealServerLoaded():
      File
    "/Applications/Reveal.app/Contents/SharedSupport/Scripts/RevealServerCommands.py",
    line 158, in isRevealServerLoaded
        pointerValue = int(value, 16)
    TypeError: int() can't convert non-string with explicit base
    (lldb) reveal load
    Traceback (most recent call last):
      File
    "/Applications/Reveal.app/Contents/SharedSupport/Scripts/RevealServerCommands.py",
    line 83, in HandleRevealCommand
        args.func(loader, result, args)
      File
    "/Applications/Reveal.app/Contents/SharedSupport/Scripts/RevealServerCommands.py",
    line 89, in HandleRevealLoadCommand
        loader.injectServer(binaryPath, result)
      File
    "/Applications/Reveal.app/Contents/SharedSupport/Scripts/RevealServerCommands.py",
    line 167, in injectServer
        if self.isRevealServerLoaded():
      File
    "/Applications/Reveal.app/Contents/SharedSupport/Scripts/RevealServerCommands.py",
    line 158, in isRevealServerLoaded
        pointerValue = int(value, 16)
    TypeError: int() can't convert non-string with explicit base
    
  13. Support Staff 13 Posted by Tony Arnold on 29 Apr, 2018 11:35 PM

    Tony Arnold's Avatar

    Hi Id, please accept my apologies for the delay in responding - I was off work sick.

    Thanks for the report on our LLDB script - I'll have a look into that for our next release. What version of Python are you using on your system?

    Have you had any luck in the time since we last spoke with connecting to your app?

    Could you please try running the curl command without piping to /dev/null and send me the response, ie:

    curl -s -D - http://localhost:49943/application
    
  14. 14 Posted by Id Raja on 15 May, 2018 04:27 PM

    Id Raja's Avatar

    Hi Tony,

    I appreciate the help, but I don’t think this tack is leading anywhere.

    For example,

    curl -s -D - http://localhost:49943/application

    … the port 49943 is always changing, so that command is dependent upon me
    doing all the prior steps with dns_sd etc.

    I have 3 machines that I develop on, and Reveal works on 1 one of them.
    What differences between those machines do you think are relevant and worth
    checking to see why it works on one and not the others?

    Thanks

  15. Support Staff 15 Posted by Vlas Voloshin on 22 May, 2018 03:55 AM

    Vlas Voloshin's Avatar

    Hi Id,

    If I understand the problem you're experiencing correctly, both your own app and Soundstagram appear in the list of discovered applications in Reveal, but attempting to inspect any of them results in a timeout error. On the other hand, attempting to contact Reveal Server using curl manually results in a successful response in a reasonable time. So this means that something's blocking Reveal's own HTTP requests to the local server.

    I have some more things for you to try troubleshooting this:

    • When you launch your app and it appears in Reveal's list of discovered applications, does the icon for your app show up successfully, or do you see a generic "grid" icon instead?
    • There's a known issue related to HSTS cookies for local web servers mentioned at the bottom of "Still Having Issues?" section of our Bonjour Debugging Article. Have you tried following the suggestions from that section?
    • If you've deleted HSTS.plist, restarted Reveal, yet the problem persists, can you open open Console app, filter by "Reveal" and show me what's logged when you attempt to inspect your app and it times out?

    Best regards,
    Vlas.

  16. 16 Posted by Id Raja on 23 May, 2018 01:44 PM

    Id Raja's Avatar

    * No apps, including Soundstagram, appear in the list of discovered
    applications for my non-working version of
    Reveal.

    * connecting to the Reveal server using curl, per the instructions of the
    “Bonjour Debugging Article”, indicate nothing wrong.

    * the conclusion that something is blocking Reveal’s HTTP requests to the
    local server seems logical.

    * Because the HSTS cookie issue is for situations where the app appears in
    the discovered applications list, and because no apps appear on my list of
    discovered applications, i haven’t done anything regarding the HSTS cookie.

    * I’m attaching console output filtered for Reveal like you requested.

    Thanks!

  17. Support Staff 17 Posted by Vlas Voloshin on 29 May, 2018 03:25 AM

    Vlas Voloshin's Avatar

    Hi Id,

    Looks like my initial understanding was wrong: your installation of Reveal can't even find the Server instance to connect to in the first place, so the theory about HSTS cookies can be dismissed for now. Instead, the logs that you've attached indicate the problem:

    Error Domain=com.ittybittyapps.Reveal.BonjourResolver.ErrorDomain Code=-72007 "Browsing for inspectable applications via Bonjour failed because the timeout was reached."

    The number of times this error occurs and the interval between them indicate that Reveal indeed has discovered an application using Bonjour, tried to resolve its address 3 times, but each time failed with a timeout, so it stopped the attempts. What's strange is that the output you've provided from dns-sd looks perfectly fine! Which means that the low-level DNS Service Discovery mechanism (used by dns-sd) works normally, but higher-level Network Service implementation (which is part of the CFNetwork framework) partially fails for some reason – at least in Reveal specifically.

    This gives me two ideas for you to try out:

    • Can you download Bonjour Browser app and check if _reveal._tcp. domain and Reveal--xxxxxxxx service shows up in its list while you're running your app with Reveal Server integrated? Bonjour Browser uses the same API as Reveal, so the fact that Reveal Server does or doesn't show up there would be a useful data point.
    • Can you try running your app on device instead of the Simulator? I'm interested to know whether your app would show up in Reveal only through USB connection, both USB and Wi-Fi, or none at all. You can differentiate connection types by small USB or Wi-Fi logos on inspectable application icons.
      • If you're using breakpoint integration method, there's a way to quickly configure your project to support Reveal debugging on device while still using breakpoint integration, even if temporarily – documented in the integration guide.

    One more suspicious thing I've noticed in the log file you've sent me is the following:

    error 08:35:29.894086 -0500 kernel Library Validation failed: Rejecting '/usr/local/lib/libsqlite3.0.dylib' (Team ID: none, platform: no) for process 'Reveal(36256)' (Team ID: KBY3G4JPGC, platform: no), reason: mapped file has no cdhash (unsigned or signature broken?)

    This indicates that Reveal attempts to dynamically load SQLite binary (which some system frameworks, including CFNetwork, depend on) from /usr/local/lib/ instead of its normal location in /usr/lib/, and fails since the binary at that location is not signed correctly. I don't know why this shows up, or whether it's relevant at all, but it surely is curious, since system frameworks certainly link to /usr/lib/libsqlite3.dylib, not the /usr/local/lib location. Just in case this proves to be the source of the problem, can you execute the following commands and upload the results here?

    • ls -la /usr/lib/libsqlite3.dylib
    • ls -la /usr/lib/libsqlite3.0.dylib
    • ls -la /usr/local/lib/libsqlite3.0.dylib
    • codesign -dvvvvv /usr/lib/libsqlite3.dylib
    • codesign -dvvvvv /usr/local/lib/libsqlite3.0.dylib

    I understand that we've been troubleshooting this issue for quite a while, but I'm still keen to get to the bottom of it as long as you are!

    Best regards,
    Vlas.

  18. 18 Posted by Id Raja on 29 May, 2018 04:02 PM

    Id Raja's Avatar

    Vlas,

    Let’s keep debugging until it’s fixed. I need Reveal to work for me so
    happy to keep going until resolution.

    I think the latest line of inquiry is going to give you some clues.

    Here is the log of the sqlite related commands you requested:

    ~ ᐅ ls -la /usr/lib/libsqlite3.dylib
    -rwxr-xr-x 1 root wheel 5337840 Dec 1 13:39 /usr/lib/libsqlite3.dylib
    ~ ᐅ ls -la /usr/lib/libsqlite3.0.dylib
    lrwxr-xr-x 1 root wheel 16 Jan 10 15:57 /usr/lib/libsqlite3.0.dylib ->
    libsqlite3.dylib
    ~ ᐅ ls -la /usr/local/lib/libsqlite3.0.dylib
    ls: cannot access '/usr/local/lib/libsqlite3.0.dylib': No such file or
    directory
    ~ ᐅ codesign -dvvvvv /usr/lib/libsqlite3.dylib

    Executable=/usr/lib/libsqlite3.dylib
    Identifier=com.apple.libsqlite3
    Format=Mach-O universal (i386 x86_64 x86_64h)
    CodeDirectory v=20100 size=13861 flags=0x0(none) hashes=429+2
    location=embedded
    Platform identifier=4
    OSPlatform=36
    OSSDKVersion=658688
    OSVersionMin=658688
    Hash type=sha256 size=32
    CandidateCDHash sha256=5e30b68b2090ae12b7addd550168a4f55762bd3a
    Hash choices=sha256
    Page size=4096
        -2=ce68668b1b6371520c25c97b6710daa701672691c6e6c2a4772a0751ea74cf82
    CDHash=5e30b68b2090ae12b7addd550168a4f55762bd3a
    Signature size=4485
    Authority=Software Signing
    Authority=Apple Code Signing Certification Authority
    Authority=Apple Root CA
    Info.plist=not bound
    TeamIdentifier=not set
    Sealed Resources=none
    Internal requirements count=1 size=68
    ~ ᐅ codesign -dvvvvv /usr/local/lib/libsqlite3.0.dylib

    /usr/local/lib/libsqlite3.0.dylib: No such file or directory

    I ran an app on the simulator and it wasn’t able to connect. I ran the same
    app on device and Reveal did connect, via both wifi and usb. Here are
    screenshots for more information:

    I’m also including a screenshot from the “Bonjour Browser” app that shows
    Reveal as one of the found services.

  19. Support Staff 19 Posted by Vlas Voloshin on 01 Jun, 2018 01:18 AM

    Vlas Voloshin's Avatar

    Hi Id,

    The results you gave me are definitely interesting. It looks like /usr/local/lib/libsqlite3.0.dylib file mentioned in the console logs is actually absent – which raises a big question why would it show up in Reveal's logs in the first place (it definitely doesn't on my machine). On the other end, it looks like Bonjour works in general – the problem is isolated to Reveal resolving localhost services.

    I'm afraid I need a little bit more information, and hopefully collecting more detailed logs could help. Please follow these steps:

    • Launch Console.app, and enable detailed logging by enabling Action → Include Info Messages and Action → Include Debug Messages menu items. You might want to disable them later.
    • Filter Console to messages containing "Reveal".
    • In Reveal, try launching Soundstagram as usual (if it's not already running).
    • When it fails to connect again, quit Reveal without closing the Simulator running Soundstagram, then clear all messages in Console – this will create a good checkpoint to start logs from.
    • Launch Reveal again. Once it opens an empty window, wait about 10 seconds as it attempts to resolve connection to Soundstagram, then switch back to Console.
    • Export the filtered logs generated so far as usual: by selecting all messages, copying and pasting them into a text file.
    • Clear the "Reveal" filter to show all logs generated since the "checkpoint", and export them as well (in a separate file). I'll consult these logs just in case some event in the filtered logs would look relevant, but more context around what was happening in the system at that moment in time would be in the non-filtered log.

    I'm hoping that the resulting logs would show more information about the problem, both coming from Reveal itself and from the system about Reveal (including the Bonjour service).

    Best regards,
    Vlas.

  20. 20 Posted by Id Raja on 15 Jun, 2018 05:17 PM

    Id Raja's Avatar

    Hi Vlas,

    Do you have a private email I can send you the logs to?

    Best Regards,
    Id

  21. Support Staff 21 Posted by Vlas Voloshin on 17 Jun, 2018 11:57 PM

    Vlas Voloshin's Avatar

    Hi Id,

    While this discussion is private and is only visible to our support engineers, you can send these logs to me directly via [email blocked]. Thanks!

    Best regards,
    Vlas.

  22. 22 Posted by Id Raja on 18 Jul, 2018 05:48 PM

    Id Raja's Avatar

    Hi Vlas,

    Apologies for the delay. I followed your instructions and produced these
    two log files as requested.

    I hope you are able to diagnose and fix the issue.

    Best,
    Id

    ​​​​

  23. Support Staff 23 Posted by Vlas Voloshin on 20 Jul, 2018 01:24 AM

    Vlas Voloshin's Avatar

    Hi Id,

    Thanks for providing these logs. After scanning through them, I've discovered that the real reason behind the service resolution timeouts that you see in Reveal but don't see in tools like dns-sd is that mDNSResponder internally seems to fail to resolve the address of localhost..

    Under normal operation, after discovering Reveal's Bonjour service and its mDNS name (e.g. Reveal--d84b571a._reveal._tcp.local.), Bonjour needs to resolve the IP address behind that name. For services running locally, the first response it gets from mDNS server is something like

    DNSServiceResolve(Reveal--d84b571a._reveal._tcp.local.) RESULT   localhost.:54413
    

    It then needs to resolve localhost. as a separate request:

    DNSServiceQueryRecord(4000, -1, localhost., Addr) START PID3304
    

    Normally it would get an immediate response, e.g.

    DNSServiceQueryRecord(localhost., Addr) RESULT ADD interface -1:    4 localhost. Addr 127.0.0.1
    

    Which allows it to complete resolution and return the results to our code in Reveal. However, in your logs I don't see this response; instead, the query is stopped after 3 seconds (which is the timeout that we use), and overall service resolution fails. We perform two more attempts to resolve the service, and after failing every time, give up on the service.

    At this point I'm not sure what could be causing this behaviour. But the first step would be to confirm this theory by executing this command in the Terminal: dns-sd -q localhost. – you should immediately see output such as this:

    DATE: ---Fri 20 Jul 2018---
    11:09:29.436  ...STARTING...
    Timestamp     A/R Flags if Name                          Type  Class   Rdata
    11:09:29.437  Add     2 -1 localhost.                    Addr   IN     127.0.0.1
    

    Another similar command to try is dns-sd -G v4 localhost., the response should be:

    DATE: ---Fri 20 Jul 2018---
    11:12:18.419  ...STARTING...
    Timestamp     A/R Flags if Hostname                               Address                                      TTL
    11:12:18.420  Add     2 -1 localhost.                             127.0.0.1                                    1
    

    Please send me the results of invoking these commands in any case. Once you try them, please also attach the contents of your /etc/hosts file. It must contain the following entries, but if it's modified in any way, a syntax error may also cause issues:

    127.0.0.1    localhost
    255.255.255.255 broadcasthost
    ::1             localhost
    

    Finally, from the logs it looks like you're running software such as Charles and Paw. This normally shouldn't cause any problems, but I wouldn't be surprised if certain features of these apps were messing with your mDNS setup. For example, Charles has a feature called DNS Spoofing (ToolsDNS Spoofing…). Can you see if it's enabled in your installation? If it is, you might want to try disabling it and try inspecting Reveal's sample app again. As for Paw, I'm not very familiar with this tool, but if you're aware of any advanced networking features it provides, you could try disabling them and trying Reveal again. In general, as an experiment, try running Reveal while both of these tools are not running.

    Looking forward for your response!

    Best regards,
    Vlas.

  24. 24 Posted by Id Raja on 20 Jul, 2018 02:01 PM

    Id Raja's Avatar

    There it is, we have a fix!

    Thank you so much for helping me diagnose and ultimately resolve this.

    I’m not sure how or when I cleared out my /etc/hosts/ file, but indeed it
    was empty.

    Send me your bitcoin address so I can send you out to have a beer on me!

    Cheers!

    —Id

  25. Support Staff 25 Posted by Vlas Voloshin on 21 Jul, 2018 03:47 AM

    Vlas Voloshin's Avatar

    Hi Id,

    I'm glad we've been able to get to the bottom of this! Restoring the default state of /etc/hosts/ should likely also improve reliability of other software that refers to localhost.

    I don't use bitcoin, but your continued support of Reveal is the best way to help me buy a beer or two 😀

    Best regards,
    Vlas.

  26. Vlas Voloshin closed this discussion on 21 Jul, 2018 03:47 AM.

Comments are currently closed for this discussion. You can start a new one.

Keyboard shortcuts

Generic

? Show this help
ESC Blurs the current field

Comment Form

r Focus the comment reply box
^ + ↩ Submit the comment

You can use Command ⌘ instead of Control ^ on Mac